当前位置: 首页 > 知识库问答 >
问题:

从具有MAX和SUM[重复]的多个表中选择

劳豪
2023-03-14

我需要查询MySql数据库的客户数据。

我有客户表、订单和连接表。

我需要找到最后一次访问-MAX(connection.date_add)

以及订单的总和。

我厌倦了在一个问题中做这件事-

select MAX( connection.date_add), SUM(order.total_paid)
from customer 
join order on customer.id = order.c_id
join connection on customer.id = connection.c_id

问题是,每个连接的结果有一行,订单数乘以连接数

我通过3次查询解决了这个问题,然后“手动”合并结果

我的问题:是否可以在一个查询中完成??

我知道在其他SQLdbs中,您可以使用AND语句,但是在MySql中,在一个查询中,有没有简单的方法可以做到这一点?

无法添加答案-所以这是解决方案-

SELECT c.id_customer, 
COUNT(DISTINCT  o.id_order ) AS '# VALID ORDERS', 
MAX( co.`date_add` ) AS last_visit,
SUM( o.total_paid )*COUNT(DISTINCT  o.id_order )/COUNT(co.`date_add` ) AS '$ (TOTAL AMOUNT)'
FROM ps_customer AS c
JOIN ps_orders o ON ( c.id_customer = o.id_customer ) 
JOIN ps_connections co ON co.id_customer = g.id_customer 
group by c.id_customer

带有内部子查询的解决方案也可以工作,但速度太慢了。

Stackoverflow-这不是副本,请仔细阅读。

共有1个答案

束阳旭
2023-03-14

您需要在联接之前使用子查询:

select MAX(co.date_add), o.total_paid
from customer cu join
     (select c_id, sum(o.total_paid) as total_paid
      from order o
      group by c_id
     ) o
     on cu.id = o.c_id join
     connection co
     on cu.id = co.c_id

我猜您还需要一个cu.id的组,这样您就可以为每个客户获得一行。

事实上,我会预先汇总这两个表:

select co.maxda, o.total_paid
from customer cu join
     (select c_id, sum(o.total_paid) as total_paid
      from order o
      group by c_id
     ) o
     on cu.id = o.c_id join
     (select co.c_id, max(co.date_add) as maxda
      from connection co
      group by co.c_id
     ) co
     on cu.id = co.c_id
group by cu.id;

 类似资料:
  • 问题内容: 我已经在这个论坛上使用了一段时间,以找到一些与SQL有关的问题的答案。现在是时候问一个我已经尝试解决一段时间的问题了。 我有两个表(产品和源)。 我想创建一个SQL SELECT来从源中检索记录列表,并从产品中检索一条附加记录(价格的总和)。我想看到的表应如下所示: source.source_id | source.location | source.source_name | so

  • 所以我的MySQL中有两个表,用户和购买。 用户表包含id、Name、Surname等。购买表包含ID、User_id、状态和支付的金额。 我需要的是从这两个表中进行选择,在这两个表中,我将有每个用户购买的每件物品的总和。 我在“用户”表中尝试过: 但这样我得到的每个用户的总数都是一样的,这是错误的。我应该写什么? 非常感谢任何可能的帮助! 为了提供一些实际的例子,让我们举一个例子: 运行查询后,

  • 问题内容: 检查以下代码: 我想匹配所有属于而不是的子元素。这意味着上面的代码不应使AQUI字变为红色,但无论如何它都会变为红色。我究竟做错了什么? 问题答案: 在将匹配没有任何类股利,你有很多他们之间和那为什么文本是红色的。要执行您想要的操作,您需要考虑两个选择器

  • 问题内容: 在将其标记为重复之前,请先看一下此SQLFiddle。 我有这个架构: 子查询: 结果: 现在,这里最棘手的部分是此查询的结果: 这是: 应该是这样的: 您认为查询中有什么问题? 问题答案: 而不是您可以简单地使用相同。也可以改用。 输出: 看到这个SQLFiddle 编辑: 如果要使用它,则必须使用如下子查询: 看到这个SQLFiddle 编辑2: 除了在外部查询中使用之外,您也可以

  • 问题内容: 因此,我有一组对象,这些对象的阶跃变量可以为1-4。 然后,我想从具有最大步进值的集合中获取一个实例,因此我这样做: 但是,在某些情况下,集合中将存在多个实例,这些实例的步骤等于4。 因此,我的问题是,如何确定在中返回哪个实例,或者当流中的多个对象具有要比较的最大值时,它是否引发异常? 该函数的Java 8文档未指定在这种情况下会发生什么。 问题答案: 被实现以减少收集: 在这里您可以

  • 我想从具有相同user_id的两个表中获取所有数据,但我不知道要使用什么类型的联接,我想确定查询的语法。 “日程”表: