[英]Mysql double left outer join with count
我有以下數據庫結構:
我想查看所有歌曲,並計算一首歌的接受次數和下降次數。
我有以下查詢:
SELECT s.*, COUNT(ra.ID) as Accepts, COUNT(rd.ID) as Declines
FROM song s
LEFT OUTER JOIN review ra ON s.ID = ra.SongID AND ra.Accept = 1
LEFT OUTER JOIN review rd ON s.ID = rd.SongID AND rd.Accept = 0
GROUP BY s.ID
這不會產生正確的結果。 我有一首有3個接受和1個拒絕的歌曲,查詢輸出3個接受和3個拒絕。 我該如何解決?
juergen的解決方案的問題是,如果一首歌沒有評論,那么r.accept
將為null
。 使用=
比較null
值時,結果為null
。 (您應該使用IS
來比較null
值)。 然后,如果SUM
(添加) null
值,則再次獲得null
值。
所以,你應該確保當一首歌沒有評論時,它將返回0
而不是null
:
SELECT s.ID,
COALESCE(SUM(r.Accept = 1), 0) as Accepts,
COALESCE(SUM(r.Accept = 0), 0) as Declines
FROM song s
LEFT OUTER JOIN review r ON s.ID = r.SongID
GROUP BY s.ID
COALESCE
將從列表中獲取第一個非null
參數,因此如果SUM
為null,則將在其位置放置0
。
SELECT s.ID,
SUM(r.Accept = 1) as Accepts,
SUM(r.Accept = 0) as Declines
FROM song s
LEFT OUTER JOIN review r ON s.ID = r.SongID
GROUP BY s.ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.