2011-11-30 48 views
2

我有下表,並試圖計算每個用戶執行的操作的數量。在單獨的列中計數多個條件 - MySQL

---------------------------------- 
| ID | User   | Action  | 
---------------------------------- 
| 1 | BobDoe  | View  | 
| 2 | BobDoe  | Edit  | 
| 3 | JaneDoe  | Comment | 
| 4 | BobDoe  | Comment | 
| 5 | JohnSmith | Edit  | 
| 6 | JaneDoe  | Edit  | 
| 7 | JohnSmith | Comment | 
| 8 | BobDoe  | View  | 
---------------------------------- 

目前我使用下面的查詢只得到編輯的數量,但我想改變它,所以它計數評論和意見,並將其顯示在自己的專欄中,我不知道我怎麼樣d可以分別計算它們,而不必進行全新的查詢。

SELECT Type, User, COUNT(*) AS Num FROM some_database GROUP BY User

任何想法?

+2

'Type'是什麼? –

+0

'Type'是'Action',對不起,我改了名字,忘了在我發佈的例子中更新它。 –

回答

9

嘗試此查詢,在MySQL的工作,因爲TRUE相當於1 FALSE相當於0:

SELECT 
    User, 
    COUNT(*) AS Num, 
    SUM(Action = 'Comment') AS NumComments, 
    SUM(Action = 'View') AS NumViews 
FROM some_table 
GROUP BY User 

結果:

你可以做
 
User  Num NumComments NumViews 
------------------------------------- 
BobDoe  4 1   2  
JaneDoe 2 1   0  
JohnSmith 2 1   0  
+1

謝謝,效果很好! –

+0

如果表爲空,則SUM(boolean)將返回NULL,而不是零。 – Flimm

0

一件事是組由兩個UserAction是這樣的:

SELECT *, COUNT(*) AS Num FROM some_database GROUP BY User, Action 

,將返回的結果是這樣的:

---------------------------------------- 
| User   | Action  | Num | 
---------------------------------------- 
| BobDoe  | View  | 2 | 
| BobDoe  | Edit  | 1 | 
| JaneDoe  | Comment | 1 | 
| BobDoe  | Comment | 1 | 
| JohnSmith | Edit  | 1 | 
| JaneDoe  | Edit  | 1 | 
| JohnSmith | Comment | 1 | 
---------------------------------------- 

因此它不會給結果在自己的專欄,但它會給計數爲每個用戶/動作組合作爲自己的行。

這個解決方案的好處在於它可以擴展到任何數量的操作(編輯,查看,評論以及將來需要的任何其他操作)。如果你不需要這種可擴展性,@Mark Byers的答案是實現它的方式,並將計數作爲列返回。