2013-04-26 135 views
1

假设我们有一个包含三个字段id(int,primary),price(double),date(datetime)的表(例如sales)。如何发现MySQL中每月的每一天的总和?

我们如何才能得到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,但我认为这不是最好的方法。

+2

'select sum(price)... group by year(datefield),month(datefield),day(datefield)' – 2013-04-26 14:43:42

+1

您希望结果是水平的吗? – Kermit 2013-04-26 14:51:50

+0

@FreshPrinceOfSO,水平是不是真的需要,thx通知。 – GarouDan 2013-04-26 17:09:54

回答

0

收集所有的想法(THX @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) 

4月(我们目前在4月份)

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) 

Thx很多。

+1

非常感谢!你知道如何做到这一点,即使是没有订单的日期,它也会显示0.现在它只会摆脱那一天的结果并给出不一致的结果(有些日子将会丢失) – 2016-02-02 21:07:45

2

你真正想要做的枢轴:

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())