gpt4 book ai didi

MySQL 组按结果分组

转载 作者:行者123 更新时间:2023-11-29 10:59:15 24 4
gpt4 key购买 nike

我有一个非常简单的表格,由以下列组成:

id | customer_id | total | created_at

我运行此查询是为了获取过去十天每天的结果:

SELECT SUM(total) AS total, DATE_FORMAT(created_at, "%d/%m/%Y") AS date
FROM table
WHERE created_at BETWEEN "2017-02-20" AND "2017-03-01"
GROUP BY created_at
ORDER BY created_at DESC

这工作正常,但我刚刚注意到导入的行由于某种原因被重复存在问题,因此我想更新查询以便能够在再次发生这种情况时处理这种情况,换句话说当日期和客户 ID 相同时(总数也相同),选择一行而不是全部。

如果我将 customer_id 添加到组中,这似乎可行,但问题是,当我只想要总体总数时,查询每天会返回每个客户的结果。

我已经尝试了一些方法,但还没有破解它,我认为使用子查询和/或内部联接可以实现它,到目前为止我已经尝试过,但数字非常错误:

SELECT
created_at,
(
SELECT SUM(total)
FROM table test
WHERE test.created_at = table.created_at
AND test.customer_id = table.customer_id
GROUP BY customer_id, created_at
LIMIT 1
) AS total
FROM table
WHERE created_at BETWEEN "2017-02-20" AND "2017-03-01"
GROUP BY created_at
ORDER BY created_at DESC

它也是一个大表,因此找到一种高性能的方法来执行此操作也很重要。

最佳答案

首先,您确定 created_at 是日期而不是日期时间吗?这有很大的不同。

您可以使用两个级别的聚合来完成您想要的操作:

SELECT SUM(max_total) AS total, DATE_FORMAT(created_at, '%d/%m/%Y') AS date
FROM (SELECT t.customer_id, t.created_at, MAX(total) as max_total
FROM table t
WHERE t.created_at BETWEEN '2017-02-20' AND '2017-03-01'
GROUP BY t.customer_id, t.created_at
) t
GROUP BY created_at
ORDER BY created_at DESC;

关于MySQL 组按结果分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42531580/

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