1

次のDB構造があります。

  • 曲 (ID、...)
  • レビュー (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 つの辞退を出力します。これを修正するにはどうすればよいですか?

4

2 に答える 2

1
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
于 2013-10-04T14:37:27.817 に答える