mysql - 按月列出分组数据,包括没有结果的月份

标签 mysql

您好社区以下查询添加每个事件状态的出现次数,然后按月对它们进行分组

select
    date_format(date_created, '%b') month,
    month(date_created) pivot,
    sum(case when a.state = 'created' then 1 else 0 end) created,
    sum(case when a.state = 'notified' then 1 else 0 end) notified,
    sum(case when a.state = 'confirmed' then 1 else 0 end) confirmed,
    sum(case when a.state = 'approved' then 1 else 0 end) approved,
    sum(case when a.state = 'authorized' then 1 else 0 end) authorized,
    sum(case when a.state = 'attended' then 1 else 0 end) attended,
    sum(case when a.state = 'canceled' then 1 else 0 end) canceled,
    count(a.id) as total
from activities a
group by 1 order by pivot desc;

所以我得到以下结果

enter image description here

我想在此结果中添加没有数据的月份,并自动补全状态总和为零

enter image description here

我分享这个sqlfiddle

我找到了这个answer到类似的场景,但我不明白如何将其应用到我向您展示的案例

非常感谢您的帮助

最佳答案

您可以使用日期表(子查询)和LEFT JOIN:

select
    s.name month,
    s.m pivot,
    sum(case when a.state = 'created' then 1 else 0 end) created,
    sum(case when a.state = 'notified' then 1 else 0 end) notified,
    sum(case when a.state = 'confirmed' then 1 else 0 end) confirmed,
    sum(case when a.state = 'approved' then 1 else 0 end) approved,
    sum(case when a.state = 'authorized' then 1 else 0 end) authorized,
    sum(case when a.state = 'attended' then 1 else 0 end) attended,
    sum(case when a.state = 'canceled' then 1 else 0 end) canceled,
    count(a.id) as total
from (SELECT  1 m, 'Jan' AS name 
      UNION SELECT 2, 'Feb' 
      UNION SELECT 3, 'Mar'
      UNION ...) s
LEFT JOIN activities a
  ON s.m = month(date_created)
  --AND s.y = year(date_created)   -- if needed 
group by 1
order by pivot desc;

<强> DBFiddle Demo

关于mysql - 按月列出分组数据,包括没有结果的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47600790/

相关文章:

php - 重新组合两个 SELECT

php - php 和 mysql 中的组存档

php - mysqli_result -- 需要结果中的字符串值

mysql - MySQL LIMIT 子句中的语法错误

mysql - 显示文本但使用组合框中的代码进行更新

mysql - 如何在 DataGridView 的标题单元格中添加复选框

php - CodeIgniter 没有正确插入 sql 数据

php - Mysql在特定日期后选择查询

mysql - 从表中选择数据时出现问题?

php - 大量更改 wordpress 永久链接