使用Group By语句显示包括零计数的MySQL计数

时间:2014-04-16 20:14:31

标签: php mysql

我正在生成mysql查询,以按月显示当前月份组收到的订单数量。

mysql的表结构如下:

order_id   date   
========   ==========
1234       2012-07-02
1235       2012-07-02
1236       2012-07-04
1237       2012-07-07
1238       2012-07-08

现在我希望它使用mysql语句返回以下结果

count(order_id)   day
===============   ===
0                 01
2                 02
0                 03
1                 04
0                 05
0                 06
1                 07
1                 08

依此类推,直到月底30/31取决于月份的日期。

期待您的建议和帮助。

感谢。

2 个答案:

答案 0 :(得分:0)

SELECT
count(order_id),
dates.dte
FROM 
(
SELECT '2011-02-01' + INTERVAL a + b DAY dte
FROM
 (SELECT 0 a UNION SELECT 1 a UNION SELECT 2 UNION SELECT 3
    UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7
    UNION SELECT 8 UNION SELECT 9 ) d,
 (SELECT 0 b UNION SELECT 10 UNION SELECT 20 
    UNION SELECT 30 UNION SELECT 40) m
WHERE '2011-02-01' + INTERVAL a + b DAY  <  '2011-03-01'
ORDER BY a + b
) dates
LEFT JOIN
orders ON orders.`date` = dates.dte
GROUP BY
dates.dte
ORDER BY
dates.dte

使用您的编程语言生成day列值

感谢@The Scrum Master

nice answer here

但我也同意这不应该在数据库中完成。如果您考虑一下,实际上您不需要0计数的行。

答案 1 :(得分:0)

使用月份和日期列表准备日历表。

要检索2012-07的所有订单:

select day(c.date), count(*)
from calendar c
left join orders o on c.date=o.date
where year(c.date) = 2012
and month(c.date) = 07
group by day(c.date)