2015-12-02 98 views
2

我想在最近X天內按天查詢多個狀態。 我可以使查詢來計算這些,但輸出沒有什麼我想成爲的,也許我在我的GROUP BY語句中有一個錯誤。所以,這就是我現在所擁有的:在過去X天內每天統計多個狀態

示例表:

date - status 
02-12-2015 - 1 
02-12-2015 - 1 
02-12-2015 - 3 
02-12-2015 - 2 
03-12-2015 - 1 
03-12-2015 - 2 

我的查詢:

SELECT 
    DATE_FORMAT(STR_TO_DATE(crdate , "%d-%m-%Y %H:%i:%S") , "%d-%m-%y") as date , COUNT(*) as countone 
FROM TBL_NAME 
WHERE status='1' 
UNION 
SELECT 
    DATE_FORMAT(STR_TO_DATE(crdate , "%d-%m-%Y %H:%i:%S") , "%d-%m-%y") as date , COUNT(*) as counttwo 
FROM TBL_NAME 
WHERE status='2' 
UNION 
SELECT 
    DATE_FORMAT(STR_TO_DATE(crdate , "%d-%m-%Y %H:%i:%S") , "%d-%m-%y") as date , COUNT(*) as countthree 
FROM TBL_NAME 
WHERE status='3' 
GROUP BY DATE_FORMAT(STR_TO_DATE(crdate , "%d-%m-%Y %H:%i:%S") , "%d-%m-%y"), status ORDER BY DATE_FORMAT(STR_TO_DATE(crdate , "%d-%m-%Y %H:%i:%S") , "%d-%m-%y") ASC 

它應該輸出如下:

date - countone - counttwo - countthree 
02-12-2015 - 2 - 1 - 1 
03-12-2015 - 1 - 1 - 0 

的問題是我的輸出只是按日期分組。 我的輸出如下:

date - countone 
02-12-2015 - 2 
02-12-2015 - 1 
02-12-2015 - 1 
03-12-2015 - 1 
03-12-2015 - 1 

任何人都可以幫助我實現這一目標?我錯了什麼?

回答

2

你可以這樣做,首先使用group by計算狀態計數,然後旋轉表格以獲得所需的結果。聯合函數將總是連接行。

select datefield, 
    max(if(status=1,count,0)) as countone, 
    max(if(status=2,count,0)) as counttwo, 
    max(if(status=3,count,0)) as countthree 
from (select datefield, status, count(*) as count 
     from TBL_NAME 
     group by datefield,status) A 
group by datefield; 

結帳的SQL撥弄設置爲它SQL Fiddle