mysql - 过去 5 天按天分组

标签 mysql group-by sum

我正在尝试选择过去 5 天的整数字段的总和,我需要将它分组为每一天。

我在确定分组时遇到了一些问题。到目前为止,这是我的 sql 查询:

select 
    sum(`amount_sale`) as total 
from `sales` 
where the_date >= unix_timestamp((CURDATE() - INTERVAL 5 DAY))

这可以很好地生成所有 5 天的总和,但我需要将其分解,以便它显示过去 5 天中每一天的总和,即:

day 1 - $200

day 2- $500

day 3 - $20

等等

最佳答案

SELECT  DATE(FROM_UNIXTIME(the_date)) AS dt, SUM(amount_sale) AS total
FROM    sales
WHERE   the_date >= UNIX_TIMESTAMP((CURDATE() - INTERVAL 5 DAY))
GROUP BY
        dt

要为缺少的日期返回 0:

SELECT  dt, COALESCE(SUM(amount_sale), 0) AS total
FROM    (
        SELECT  CURDATE() - INTERVAL 1 DAY AS dt
        UNION ALL
        SELECT  CURDATE() - INTERVAL 2 DAY AS dt
        UNION ALL
        SELECT  CURDATE() - INTERVAL 3 DAY AS dt
        UNION ALL
        SELECT  CURDATE() - INTERVAL 4 DAY AS dt
        UNION ALL
        SELECT  CURDATE() - INTERVAL 5 DAY AS dt
        ) d
LEFT JOIN
        sales
ON      the_date >= UNIX_TIMESTAMP(dt)
        AND the_date < UNIX_TIMESTAMP(dt + INTERVAL 1 DAY)
GROUP BY
        dt

这不是一个非常优雅的解决方案,但是,MySQL 缺少一种从头开始生成记录集的方法。

关于mysql - 过去 5 天按天分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792686/

相关文章:

mysql - 首先对结果进行排序,然后按 mysql 中的结果集分组

sql - Postgres : Group by on a column but query needs to return all columns in the table

mysql - 选择日期相等且 ID 相等的行,并将这些行计为一个

python - 使用 Pandas 对包含数字和文本的列求和

javascript - 欧拉项目#345 : Max sum matrix with unique path

mysql - 重启后 XAMPP MySQL 服务崩溃

php - Mysql - 唯一索引或列

mysql - 如何解析 MySQL 版本 < 5.7 中的 json 列

MYSQL:使用 GROUP BY 增加行与行之间的值

mysql - 分组 sum 、 count 和 max 以按多列分组