2011-04-01 54 views
2

我的一位同事正在研究SQL查詢。經過多次連接(工人帳戶任務),她得到了一些信息排序是這樣的:如何使用多個COUNT爲不同的GROUP BY編寫SQL查詢?

Worker  Account Date  Task_completed 
Bob Smith 12345  01/01/2010 Received 
Bob Smith 12345  01/01/2010 Received 
Bob Smith 12345  01/01/2010 Processed 
Sue Jones 23456  01/01/2010 Received 
... 

最終自己想要的東西是這樣的 - 每個日期,每個帳戶,許多任務是如何做到每個工人完成該帳戶?

Worker  Account Date  Received_count Processed_count 
Bob Smith 12345  01/01/2010 2    1 

...還有其他幾種狀態可以計數。

獲取這些計數的一個是很容易的:

SELECT 
    COUNT(Task_completed) 
FROM 
    (the subselect) 
WHERE 
    Task_completed = 'Received' 
GROUP BY 
    worker, account, date 

但我不知道,讓他們所有的最佳途徑。 本質上我們想要多個COUNT s使用不同的GROUP BY s。我能找到的最好的東西是複製和粘貼子查詢幾次,將WHERE更改爲「已處理」等,並將所有這些加在一起,從每一箇中選擇計數。

有沒有更明顯的方法來做到這一點?

+0

有問題!爲什麼在你的例子中說在Processed_count = 1? – Longha 2011-04-01 16:15:33

回答

5
SELECT worker, account, date, 
     SUM(task_completed = 'Received') AS received_count, 
     SUM(task_completed = 'Processed') AS processed_count 
FROM mytable 
GROUP BY 
     worker, account, date 
+0

啊!有條件的「SUM」 - 這就是我所缺少的。 *更簡單。我想我只用於數字字段。謝謝! – 2011-04-01 16:12:31

+0

@Nathan:在'MySQL'中,'BOOLEAN'只是'TINYINT'的別名。 – Quassnoi 2011-04-01 16:14:10