按月和按不同值的列分组

时间:2017-06-16 05:27:13

标签: mysql

我在尝试创建一个允许我按月分组和具有不同值的列的查询时遇到问题。

以下是我需要查询的表和列的小表示。

表名是请求,有两列日期和状态。状态可能具有待处理,有人值守,缺席和取消的值。

我希望得到一个看起来像这样的查询

Target

现在我正在尝试每个可能值的状态子查询。它有效,但查询速度很慢。 8000行需要48秒左右。

SELECT
    MONTHNAME(date)
    (SELECT count(status) FROM requests WHERE status = "pending"),
    (SELECT count(status) FROM requests WHERE status = "attended"),
    (SELECT count(status) FROM requests WHERE status = "absent"),
    (SELECT count(status) FROM requests WHERE status = "canceled")
FROM request
GROUP BY 1;

有关如何有效获得结果的任何建议?非常感谢你

1 个答案:

答案 0 :(得分:2)

你可以在状态上使用case whene而不是几个subselect

  select  
        MONTHNAME(date) 
      , sum( case when status = "pending" then 1 else 0 end) pending
      , sum( case when status = "attended" then 1 else 0 end) attended
      , sum( case when status = "absent" then 1 else 0 end) absent
      , sum( case when status = "canceled" then 1 else 0 end) canceled
  FROM request
  GROUP BY  MONTHNAME(date) ;