gpt4 book ai didi

mysql - 使用 MAX 和 SUM 从多个表中选择

转载 作者:行者123 更新时间:2023-11-29 12:16:21 26 4
gpt4 key购买 nike

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

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

我需要找到上次访问 - 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

问题是每个连接结果有1行,并且订单数乘以连接数

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

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

我知道在其他 SQL 数据库中您可以使用WITH 语句,但是在 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

我猜您还想要一个group by 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;

关于mysql - 使用 MAX 和 SUM 从多个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29729321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com