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