如何在 MySQL 中发现一个月中每一天的总和?

Posted

技术标签:

【中文标题】如何在 MySQL 中发现一个月中每一天的总和?【英文标题】:How to discover the sum of each day of a month in MySQL? 【发布时间】:2013-04-26 14:42:28 【问题描述】:

假设我们有一个表(例如sales),其中包含三个字段id(int,primary),price(double),date(datetime)。

我们怎样才能得到当月每一天的price属性的总和?

到最后一个月?

我也需要类似的退货:

二月

01        02        03        04        ...        30
101.1     233.43    1232.42  3232.21             121.23

四月

01        02        03        04        ...        30        31
11.1     23.43      122.42   332.21              121.23    2323.32

我们怎样才能做到这一点?

请给我一个SQL作为例子。

我想写一个方法来发现一个月的天数,而不是迭代地创建 SQL,但我认为这不是最好的方法。

【问题讨论】:

select sum(price) ... group by year(datefield), month(datefield), day(datefield) 您希望结果是水平的? @FreshPrinceOfSO,水平不是真的需要,谢谢通知。 【参考方案1】:

你实际上想要做一个支点:

select year(date), month(date),
       sum(case when day(date) = 1 then price end) as price_01,
       sum(case when day(date) = 2 then price end) as price_02,
       . . .
       sum(case when day(date) = 31 then price end) as price_31
from sales
group by month(date), year(date)

然后为您想要的日期添加一个where 子句。比如:

where month(date) = month(now())

【讨论】:

【参考方案2】:

收集所有想法(谢谢@MarcB、@Stephan、@GordonLinoff)SQL 波纹管是我正在寻找的:

二月

SELECT
    SUM(price) AS daySum
FROM
    sales
WHERE
    date BETWEEN DATE_FORMAT(NOW() - INTERVAL 2 MONTH,'%Y-%m-01 00:00:00') AND DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 2 MONTH),'%Y-%m-%d 23:59:59')
GROUP BY
    YEAR(date),
    MONTH(date),
    DAY(date)

四月(我们目前是四月)

SELECT
    SUM(price) AS daySum
FROM
    sales
WHERE
    date BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01 00:00:00') AND DATE_FORMAT(LAST_DAY(NOW()),'%Y-%m-%d 23:59:59')
GROUP BY
    YEAR(date),
    MONTH(date),
    DAY(date)

非常感谢。

【讨论】:

非常感谢!你知道如何做到这一点,即使对于没有订单的日期,它也会显示 0。现在它只会在结果中删除那一天并给出不一致的结果(有些日子会丢失)

以上是关于如何在 MySQL 中发现一个月中每一天的总和?的主要内容,如果未能解决你的问题,请参考以下文章

mysql怎么得到时间段每一天,不用表,就是得到一个时间段的每一天的日期

php使用mysql数据库,要查询一个时间段里面每一天的数据量,当天没有则显示0.时间段可能是几天或者几月

mysql查询某段时间段中每一天的数据

如何在 obiee 中显示一个月中所有日期的一个值?

如何在 PostgreSQL 中获取表的每一天的第一个日期并将其转换为 JSON

MySQL 获取某个时间段每一天每一个小时的统计数据