计算一年中每个月的三个级别(L1,L2,L3)列和状态P的行数

时间:2016-12-15 10:10:27

标签: mysql

我的桌子上有一张像enter image description here的桌子:

所以我想计算三个级别(L1,L2,L3)的行作为列,并且状态是一年中每个月的P。

我解决了单一查询。

选择年份(日期)作为年份,日期作为月份,(SELECT COUNT(level_id))作为L1 FROM出勤率WHERE level_id =' L1' AND status =' P'和年(日期)=' 2016' GROUP BY日期

我想要一张像这张桌子一样的桌子:

enter image description here

1 个答案:

答案 0 :(得分:1)

以下查询应该为您提供所需的结果。只需使用条件聚合和GROUP BY来计算每种类型的关卡在给定年份和月份出现的次数。

SELECT YEAR(date) AS year,
       MONTH(date) AS month,
       SUM(CASE WHEN level_id = 'L1' THEN 1 ELSE 0 END) AS L1,
       SUM(CASE WHEN level_id = 'L2' THEN 1 ELSE 0 END) AS L2,
       SUM(CASE WHEN level_id = 'L3' THEN 1 ELSE 0 END) AS L3
FROM yourTable
WHERE status = 'P' AND
      YEAR(date) = 2016
GROUP BY YEAR(date),
         MONTH(date)

作为未来参考的提示,如果您想避免通过两个单独的列进行排序,您也可以使用它:

GROUP BY DATE_FORMAT(date, '%Y-%m')

这会给你一个包含年份和月份的列,并且可能会使你的查询更简洁。