按月份和按列分组,具有不同的值

问题描述:

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

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

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

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

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; 

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

+0

考虑处理数据显示的问题,在应用程序代码 – Strawberry

你可以使用情况whene上的地位,而不是几个子查询

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) ; 
+0

好一个...但你可以请创建此使用另一个查询动态查询 –

+0

@AnkitAgrawal你对我的评论不清楚(似乎与问题无关) – scaisEdge

+0

我在说,你可以请动态查询编辑你的答案,其中状态的输入值是动态的 –