簡體   English   中英

MySQL查詢,嘗試收集計數

[英]MySQL Query, trying to gather count

我正在嘗試編寫一個查詢,以獲取數據庫中每個recordlabel的藝術家和樂隊的數量。 出於某種原因,當我運行以下查詢時,它沒有列出數據庫中分配給樂隊或藝術家的每個唱片公司標簽。

 SELECT  r.labelName, 
        COUNT(a.recordLabelID) +COUNT(b.recordLabelID) AS count 
        FROM recordLabel r JOIN artist a ON r.recordLabelID = a.recordLabelID
        JOIN band b ON r.recordLabelID = b.recordLabelID
        GROUP BY r.recordlabelID ORDER BY count DESC

嘗試使用left join

SELECT r.labelName, COUNT(a.recordLabelID) + COUNT(b.recordLabelID) AS count
FROM recordLabel r JOIN
     artist a
     ON r.recordLabelID = a.recordLabelID JOIN
     band b
     ON r.recordLabelID = b.recordLabelID
GROUP BY r.recordlabelID
ORDER BY count DESC;

但是,這將不起作用,因為計數將返回相同的值。 一個簡單的解決方法是使用COUNT(DISTINCT)

SELECT r.labelName,
       COUNT(DISTINCT a.recordLabelID) + COUNT(DISTINCT b.recordLabelID) AS count
FROM recordLabel r LEFT JOIN
     artist a
     ON r.recordLabelID = a.recordLabelID LEFT JOIN
     band b
     ON r.recordLabelID = b.recordLabelID
GROUP BY r.recordlabelID
ORDER BY count DESC;

您需要使用LEFT JOIN ,以防某些標簽上有歌手但沒有樂隊,反之亦然。

更具擴展性的解決方案是在進行聯接之前進行聚合。

使用LEFT JOIN

FROM recordLabel r 
LEFT JOIN artist a ON r.recordLabelID = a.recordLabelID
LEFT JOIN band b ON r.recordLabelID = b.recordLabelID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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