2012-08-15 36 views
0

如何將以下2個查詢合併到一個查詢中?SQL:在同一字段中使用不同where子句的2個不同計數

select count(distinct user_id) as action_1_count, date 
from table  
where action = "action_1" 
group by date; 

select count(distinct user_id) as action_2_count, date 
from table 
where action = "action_2" 
group by date; 
+0

你想讓他們爲兩列或兩行? – 2012-08-15 17:58:30

回答

0
SELECT COUNT(user_id), date 
FROM table 
WHERE action IN ('action_1', 'action_2) 
GROUP BY action, date 
+0

謝謝。我正在嘗試選擇2個計數(user_id)列。第一個計算動作1發生次數,第二個計算動作2發生 – user1601130 2012-08-15 18:37:42

+0

@ user1601130對,在'SELECT'後面加上'action' ...'SEELCT動作,COUNT ...' – Kermit 2012-08-15 18:38:39

0

您的查詢,可就是這樣

SELECT COUNT(user_id), date FROM table WHERE action IN ('action_1', 'action_2') GROUP BY date 

下面是使用SUM()功能本應該做的伎倆

SELECT 
    SUM(action ='action_1') count_1, 
    SUM(action ='action_2') count_2, 
    SUM(action ='action_1' OR action ='action_2') `full_count`, 
    date 
FROM 
table 
GROUP BY date 

與表達式中使用SUM()將導致另一條路在布爾值中,如果action ='action_1'那麼結果將是1如果沒有的話0,這一切都歸結生產基於表達式的結果計數

1

做這樣的合併上面的查詢:

SELECT date, 
     CASE WHEN action = "action_1" THEN COUNT(user_id) END AS Action1Count, 
     CASE WHEN action = "action_2" THEN COUNT(user_id) END AS Action2Count 
    FROM table  
    WHERE action IN ("action_1", "action_2") 
    GROUP BY date 
+0

這會返回每行1列的值,另一列(取決於行的action1或action2)顯示空值 – user1601130 2012-08-15 19:11:11

0

以上答案會給你ACTION_2多行,而看起來你只需要一行action_2。

你可以使用一個聯盟:

select '1', count(distinct user_id), date 
from table 
where action = "action_1" 
group by 3 
union 
select '2', count(distinct user_id), max(date) 
from table 
where action = "action_2" 
group by 3; 
+0

雖然查看原始SQL,但是不清楚是否存在簡單的省略。 – bcholmes 2012-08-15 18:06:40

相關問題