2012-05-17 76 views
2

我有一個表Mysql的計數幾個領域

 
id|user_id|start|stop 
1|  1| 1| 1 
2|  2| 1| 1 
3|  2| 1| 0 
4|  3| 0| 0 

我想下一個結果

 
user_id|total|start|stop 
      1|    1|    1|   1 
      2|    2|    2|   1 
      3|    1|    0|   0 

所以我想通過做USER_ID昂拿到3計數和組了。有沒有可能準備查詢與聯合和沒有派生表?

+0

'user_id = 2'是如何計算'start'和'stop'的? – eggyal

+0

你是如何得到下一個結果的基礎上你有? –

+0

它似乎是user_id = 2的行應該是'2 | * 3 * | 2 | 1' –

回答

2

總排爲在stop兩次計數start和1與1行。

SELECT user_id, 
    count(case start WHEN 1 then 1 else null end) AS start, 
    count(case stop WHEN 1 then 1 else null end) AS stop, 
    count (*) AS total 
FROM tablename 
GROUP BY user_id 
+1

計數功能將計入列中值0或1。所以結果將是錯誤的。 Op想知道用戶啓動和停止的次數以及該user_id的記錄總數。 –

+0

我誤解了這個問題,並糾正了我的答案。你介意取消投票嗎? –

+0

感謝您的回答! – dr0zd

3
SELECT user_id, 
     Sum (start) AS start, 
     Sum (stop) AS stop, 
     Count(*) AS total 
FROM tablename 
GROUP BY user_id 
+0

儘管在這種情況下'count'與'sum'給出了相同的答案,我仍然建議使用'count' - 如果表中的數據發生變化並且允許0或1以外的值,它仍然可以工作。 –

+0

感謝您的回答! – dr0zd

3
SELECT user_id, COUNT(*) total, SUM(start=1) start, SUM(stop=1) stop 
FROM  my_table 
GROUP BY user_id 
+0

感謝您的回答! – dr0zd