我有以下DB结构:
我想看看所有的歌曲,数一数有多少接受和多少拒绝歌曲有。
我有以下查询:
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下降。我该怎么解决这个问题?
发布于 2013-10-04 14:46:37
尤尔根的解决方案的问题是,如果一首歌没有评论,那么r.accept将是null。当您使用null比较一个=值时,您就得到了null。(您应该使用IS来比较null值)。然后,如果您添加SUM (add) 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.IDCOALESCE将从列表中获取第一个非null参数,因此如果SUM为null,则将放置一个0。
发布于 2013-10-04 14:37:27
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.IDhttps://stackoverflow.com/questions/19183945
复制相似问题