簡體   English   中英

左側與右側的 Count 和 Where 子句連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM