2011-10-27 263 views
1

通常我們會選擇SQL查詢中的字段。例如SQL:如何在SELECT查詢結果中添加一列?

SELECT A.id FROM Member A 

但是,如果我想要對齊一個列對應於其他選定字段的列,該怎麼辦? 例如,我想從成員表中選擇成員ID,並計算該成員在其他表的元組中顯示的次數的計數。

那麼如何使COUNT列與select結果?

回答

0
select member_id, count(*) 
from table 
group by member_id; 
+0

如果你不關心0,你會是對的。 – SQLMason

+0

我不知道,但你是對的,有人可能;-) – Jack

5

如果我理解正確的你,這是你想要什麼:

SELECT A.id, count(B.MemberID) 
FROM Member A 
LEFT JOIN TableB B on A.id = B.MemberID 
group by A.id 

LEFT JOIN將包括A記錄沒有在B.同時,任何相應的記錄,COUNT只能算作非空值,所以你需要使用它B.MemberID。這樣A中沒有任何相應記錄的記錄在B中的計數將爲0,因爲B.MemberID將是NULL

2

我同意@Adrian的解決方案,但是如果原始SELECT列表中有很多列,它們都必須在GROUP BY中列出。我的意思是這樣的:

SELECT 
    A.id, 
    A.name, 
    A.whatever, 
    ... 
    COUNT(B.member_id) 
FROM Member A 
    LEFT JOIN Member_Something B ON A.id = B.member_id 
GROUP BY 
    A.id, 
    A.name, 
    A.whatever, 
    ... 

它並不總是很方便,尤其是當列實際上是表達式。你可以採取另一種方法:

SELECT 
    A.id, 
    A.name, 
    A.whatever, 
    ... 
    COALESCE(B.member_count, 0) 
FROM Member A 
    LEFT JOIN (
    SELECT member_id, COUNT(*) AS member_count 
    FROM Member_Something 
    GROUP BY member_id 
) B ON A.id = B.member_id 
+0

+1爲了達到一個新的水平 –

+0

@Andriy:我不知道你,但CTRL-C和CTRL-V在我的作品操作系統與我的鍵盤:D認真,好點。 – SQLMason

+0

@DanAndrews:是的,Ctrl-C和Ctrl-V永遠是這樣一個美妙的幫助,我們會在哪裏沒有它。 ;) –

相關問題