gpt4 book ai didi

Mysql双左外连接与计数

转载 作者:行者123 更新时间:2023-11-29 05:26:52 26 4
gpt4 key购买 nike

我有以下数据库结构:

  • 歌曲(ID,...)
  • 审核(SongID,接受)

我想查看所有歌曲并计算一首歌曲有多少接受和拒绝。

我有以下查询:

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 将放在它的位置。

关于Mysql双左外连接与计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19183945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com