簡體   English   中英

Mysql雙重左外連接與計數

[英]Mysql double left outer join with count

我有以下數據庫結構:

  • 歌曲(身份證,...)
  • 評論(SongID,Accept)

我想查看所有歌曲,並計算一首歌的接受次數和下降次數。

我有以下查詢:

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.

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