通常我們會選擇SQL查詢中的字段。例如SQL:如何在SELECT查詢結果中添加一列?
SELECT A.id FROM Member A
但是,如果我想要對齊一個列對應於其他選定字段的列,該怎麼辦? 例如,我想從成員表中選擇成員ID,並計算該成員在其他表的元組中顯示的次數的計數。
那麼如何使COUNT列與select結果?
通常我們會選擇SQL查詢中的字段。例如SQL:如何在SELECT查詢結果中添加一列?
SELECT A.id FROM Member A
但是,如果我想要對齊一個列對應於其他選定字段的列,該怎麼辦? 例如,我想從成員表中選擇成員ID,並計算該成員在其他表的元組中顯示的次數的計數。
那麼如何使COUNT列與select結果?
select member_id, count(*)
from table
group by member_id;
如果我理解正確的你,這是你想要什麼:
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
。
我同意@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
+1爲了達到一個新的水平 –
@Andriy:我不知道你,但CTRL-C和CTRL-V在我的作品操作系統與我的鍵盤:D認真,好點。 – SQLMason
@DanAndrews:是的,Ctrl-C和Ctrl-V永遠是這樣一個美妙的幫助,我們會在哪裏沒有它。 ;) –
如果你不關心0,你會是對的。 – SQLMason
我不知道,但你是對的,有人可能;-) – Jack