我需要查询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-这不是副本,请仔细阅读。
您需要在联接之前使用子查询:
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的两个表中获取所有数据,但我不知道要使用什么类型的联接,我想确定查询的语法。 “日程”表: