2016-01-16 42 views
1

我有4列的表(id, bm, name, act)。SQL SELECT查詢與組和不同

我不想這麼檢索由bm分組的記錄和統計每一組有多少條記錄,其中有和act = no其中act = yes一次......

,如果我有記錄:

(Id, bm, name, act) 
1, 5, Nik, yes 
2, 6, Mike, yes 
3, 5, Tom, no 
4, 5, Alex, no 

結果我需要是:

(bm, totalYes, totalNo) 
5, 1, 2 
6, 1, 0 

我想,一切都可能從SQL檢索,但我不知道如何:(

+1

所以,你所面臨的issue..and把片斷你做了什麼 –

+0

@LazaBre嘗試以下。 'Select SUM(CASE WHEN act ='no'THEN 1 ELSE 0 END)as NoCount,SUM(CASE WHEN act ='yes'THEN 1 ELSE 0 END)YesCount from tbl group by gm' – tchelidze

回答

0

可以使用條件的聚合,從而實現這一結果:

select 
    bm, 
    sum(case when act = 'yes' then 1 else 0 end) as "Count of yes", 
    sum(case when act = 'no' then 1 else 0 end) as "Count of no" 
from t 
group by bm; 

對於某些數據庫,如MySQL,你可以聚集減少sum(act = 'yes'),但ANSI SQL標準需要完整的案例表達。

Sample SQL Fiddle

+0

omg,非常感謝,這是如此之快;)我試圖與distict和一些其他的東西,現在我看到我錯在哪裏......好的一個更多q :(如果我想多做一列(是 - (減)否) btw對不起,如果我無聊你.. – LazaBre

+0

@LazaBre如果你想'是減去否'然後從第一個減去第二個案例表達式。請參閱:http://www.sqlfiddle.com/#!15/66bd9/5 – jpw

+1

謝謝,謝謝你,謝謝你,謝謝你;)如果你曾經來過塞爾維亞,你就有我的啤酒;) – LazaBre

0

嘗試以下

SELECT SUM(CASE WHEN act = 'no' THEN 1 ELSE 0 END) as NoCount, 
SUM(CASE WHEN act = 'yes' THEN 1 ELSE 0 END) YesCount 
FROM tbl 
GROUP BY gm 
0

由於聚合函數通常跳過空值,你可以創建兩列TotalYesTotalNo,與你不想在你的計數,包括案件的值NULL

這裏就是我的意思是:

SELECT 
    bm, 
    COUNT(CASE act WHEN 'yes' THEN 1 ELSE NULL END) TotalYes, 
    COUNT(CASE act WHEN 'no' THEN 1 ELSE NULL END) TotalNo 
FROM tbl 
GROUP BY bm