[英]Left Join with Count and Where Clause on right side
我有以下查詢:
SELECT G.groupCode, G.groupName, COUNT(C.cdCode) AS numberOfTops10CDs FROM musicalgroup G
LEFT OUTER JOIN cd C ON C.groupCode = G.groupCode
WHERE C.cdCode IN
(SELECT cdCode FROM topcds WHERE rating <= 10)
GROUP BY G.groupCode
在這種情況下,如果關聯的計數為 0,它不會顯示組。即使計數為 0,我也希望它顯示 Musicgroup 中的每個元素。當我這樣做時:
SELECT G.groupCode, G.groupName, COUNT(C.cdCode) AS numberOfTops10CDs FROM musicalgroup G
LEFT OUTER JOIN cd C ON C.groupCode = G.groupCode
GROUP BY G.groupCode
即使計數為 0,它也會顯示,但我只需要顯示評分低於 10 的 CD。我將如何在一個查詢中實現這兩個目標?
嘗試這個:
SELECT G.groupCode,
G.groupName,
COUNT(C.cdCode) AS numberOfTops10CDs
FROM musicalgroup G
LEFT OUTER JOIN cd C
ON C.groupCode = G.groupCode AND
C.cdCode in (SELECT distinct cdCode FROM topcds WHERE rating <= 10)
GROUP BY G.groupCode,G.groupName
我認為這樣的事情與您正在嘗試做的事情一致。 下面的查詢使用條件聚合來計算每個音樂組中評分大於 10 的 CD 數量。它避免了使用WHERE
子句的問題,該子句可以刪除要用於結果集的記錄。
SELECT g.groupCode,
SUM(CASE WHEN c.cdCode IN
(SELECT cdCode FROM topcds WHERE rating > 10) THEN 1 END) AS numberOfTops10CDs
FROM musicalgroup g
LEFT JOIN cd c
ON g.groupCode = c.groupCode
GROUP BY g.groupCode
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.