Mysql 包括空月份
我在获取查询的正确结果时遇到问题Mysql 包括空月份,mysql,group-by,Mysql,Group By,我在获取查询的正确结果时遇到问题 我正在做一个查询,以获得每个月有多少用户注册。到目前为止,我提出了以下查询,它允许我获得该结果,但没有显示没有注册用户的月份 结果: +------+-------+-------+ | YEAR | MONTH | Total | +------+-------+-------+ | 2016 | Feb | 1 | | 2016 | Apr | 1 | | 2016 | May | 1 | | 2016 | Jul
我正在做一个查询,以获得每个月有多少用户注册。到目前为止,我提出了以下查询,它允许我获得该结果,但没有显示没有注册用户的月份
结果:
+------+-------+-------+
| YEAR | MONTH | Total |
+------+-------+-------+
| 2016 | Feb | 1 |
| 2016 | Apr | 1 |
| 2016 | May | 1 |
| 2016 | Jul | 1 |
+------+-------+-------+
4 rows in set (0.00 sec)
我希望它是这样的+------+-------+-------+
| YEAR | MONTH | Total |
+------+-------+-------+
| 2016 | Jan | 0 |
| 2016 | Feb | 1 |
| 2016 | Mar | 0 |
| 2016 | Apr | 1 |
| 2016 | May | 1 |
| 2016 | Jun | 0 |
| 2016 | Jul | 1 |
| 2016 | Aug | 0 |
| 2016 | Sep | 0 |
| 2016 | Oct | 0 |
| 2016 | Nov | 0 |
| 2016 | Dec | 0 |
+------+-------+-------+
像这样试试
使用SUM
而不是COUNT
。不管怎么说,你要显示零或一
SELECT
YEAR(c.created_at) as 'YEAR',
(CASE WHEN MONTH(c.created_at)=1 THEN 'Jan'
WHEN (MONTH(c.created_at)=2) THEN 'Feb'
WHEN (MONTH(c.created_at)=3) THEN 'Mar'
WHEN (MONTH(c.created_at)=4) THEN 'Apr'
WHEN (MONTH(c.created_at)=5) THEN 'May'
WHEN (MONTH(c.created_at)=6) THEN 'Jun'
WHEN (MONTH(c.created_at)=7) THEN 'Jul'
WHEN (MONTH(c.created_at)=8) THEN 'Aug'
WHEN (MONTH(c.created_at)=9) THEN 'Sep'
WHEN (MONTH(c.created_at)=10) THEN 'Oct'
WHEN (MONTH(c.created_at)=11) THEN 'Nov'
WHEN (MONTH(c.created_at)=12) THEN 'Dec'
END) AS 'MONTH',
SUM (CASE WHEN c.id IS NOT NULL THEN 1 ELSE 0 END ) as Total
FROM customers as c
WHERE YEAR(c.created_at) = 2016
GROUP BY c.id, MONTH(c.created_at)
ORDER BY YEAR(c.created_at), MONTH(c.created_at), Total ASC
像这样试试
使用SUM
而不是COUNT
。不管怎么说,你要显示零或一
SELECT
YEAR(c.created_at) as 'YEAR',
(CASE WHEN MONTH(c.created_at)=1 THEN 'Jan'
WHEN (MONTH(c.created_at)=2) THEN 'Feb'
WHEN (MONTH(c.created_at)=3) THEN 'Mar'
WHEN (MONTH(c.created_at)=4) THEN 'Apr'
WHEN (MONTH(c.created_at)=5) THEN 'May'
WHEN (MONTH(c.created_at)=6) THEN 'Jun'
WHEN (MONTH(c.created_at)=7) THEN 'Jul'
WHEN (MONTH(c.created_at)=8) THEN 'Aug'
WHEN (MONTH(c.created_at)=9) THEN 'Sep'
WHEN (MONTH(c.created_at)=10) THEN 'Oct'
WHEN (MONTH(c.created_at)=11) THEN 'Nov'
WHEN (MONTH(c.created_at)=12) THEN 'Dec'
END) AS 'MONTH',
SUM (CASE WHEN c.id IS NOT NULL THEN 1 ELSE 0 END ) as Total
FROM customers as c
WHERE YEAR(c.created_at) = 2016
GROUP BY c.id, MONTH(c.created_at)
ORDER BY YEAR(c.created_at), MONTH(c.created_at), Total ASC
您可以根据创建一个12行表以进行外部连接。您可以根据创建一个12行表以进行外部连接。我已经提出了这个解决方案,它非常适合我的情况。
我使用以下查询为月份创建了一个关键表
SELECT
YEAR(b.created_at) as 'YEAR',
COUNT(CASE WHEN MONTH(b.created_at)=1 THEN b.id END) as Jan,
COUNT(CASE WHEN MONTH(b.created_at)=2 THEN b.id END) as Feb,
COUNT(CASE WHEN MONTH(b.created_at)=3 THEN b.id END) as Mar,
COUNT(CASE WHEN MONTH(b.created_at)=4 THEN b.id END) as Apr,
COUNT(CASE WHEN MONTH(b.created_at)=5 THEN b.id END) as May,
COUNT(CASE WHEN MONTH(b.created_at)=6 THEN b.id END) as Jun,
COUNT(CASE WHEN MONTH(b.created_at)=7 THEN b.id END) as Jul,
COUNT(CASE WHEN MONTH(b.created_at)=8 THEN b.id END) as Aug,
COUNT(CASE WHEN MONTH(b.created_at)=9 THEN b.id END) as Sep,
COUNT(CASE WHEN MONTH(b.created_at)=10 THEN b.id END) as Oct,
COUNT(CASE WHEN MONTH(b.created_at)=11 THEN b.id END) as Nov,
COUNT(CASE WHEN MONTH(b.created_at)=12 THEN b.id END) as 'Dec',
COUNT(b.id) as Total
FROM customers as b
GROUP BY YEAR(b.created_at)
ORDER BY YEAR(b.created_at) ASC
产生此输出的组件+------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+
| YEAR | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Total |
+------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+
| 2015 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 2 |
| 2016 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 4 |
+------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+
2 rows in set (0.00 sec)
从技术上讲,它解决了这个问题,因为它包括空月。我已经提出了这个解决方案,它很适合我的情况。
我使用以下查询为月份创建了一个关键表
SELECT
YEAR(b.created_at) as 'YEAR',
COUNT(CASE WHEN MONTH(b.created_at)=1 THEN b.id END) as Jan,
COUNT(CASE WHEN MONTH(b.created_at)=2 THEN b.id END) as Feb,
COUNT(CASE WHEN MONTH(b.created_at)=3 THEN b.id END) as Mar,
COUNT(CASE WHEN MONTH(b.created_at)=4 THEN b.id END) as Apr,
COUNT(CASE WHEN MONTH(b.created_at)=5 THEN b.id END) as May,
COUNT(CASE WHEN MONTH(b.created_at)=6 THEN b.id END) as Jun,
COUNT(CASE WHEN MONTH(b.created_at)=7 THEN b.id END) as Jul,
COUNT(CASE WHEN MONTH(b.created_at)=8 THEN b.id END) as Aug,
COUNT(CASE WHEN MONTH(b.created_at)=9 THEN b.id END) as Sep,
COUNT(CASE WHEN MONTH(b.created_at)=10 THEN b.id END) as Oct,
COUNT(CASE WHEN MONTH(b.created_at)=11 THEN b.id END) as Nov,
COUNT(CASE WHEN MONTH(b.created_at)=12 THEN b.id END) as 'Dec',
COUNT(b.id) as Total
FROM customers as b
GROUP BY YEAR(b.created_at)
ORDER BY YEAR(b.created_at) ASC
产生此输出的组件+------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+
| YEAR | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Total |
+------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+
| 2015 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 2 |
| 2016 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 4 |
+------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+
2 rows in set (0.00 sec)
从技术上讲,它解决了这个问题,因为它包括空月份