2017-06-16 83 views
0

我在嘗試創建一個查詢時遇到了問題,該查詢允許按月和具有不同值的列進行分組。按月份和按列分組,具有不同的值

以下是我需要查詢的表和列的一個小表示。

表名是請求並有兩列日期和狀態。狀態可能有待處理,出席,缺席和取消的值。

我希望得到一個查詢,看起來像這樣

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

回答

2

你可以使用情況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

我在說,你可以請動態查詢編輯你的答案,其中狀態的輸入值是動態的 –