左联接中的总和计数错误

时间:2019-03-30 13:52:45

标签: php mysql

在左联接中查询的总计数错误。

这是2个单独的查询,分别给出正确的结果。

SELECT wallpaper_id FROM `contest_participants` WHERE contest_id=2

SELECT wallpaper_id, SUM(upvotes) FROM `contest_wallpaper_upvote` WHERE contest_id=2 GROUP BY wallpaper_id

我已经使用join总结了如下的投票

Select distinct p.wallpaper_id, sum(u.upvotes) from contest_participants p
Left join contest_wallpaper_upvote as u
On p.wallpaper_id = u.wallpaper_id
Where p.contest_id = 2  group by p.wallpaper_id

问题是,如果upvote表中没有wallpaper_id的条目,则会得出错误的总计数。

有人可以帮我解决该查询吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以像下面那样检查。如果u.wallpaper_id为空,则可以添加0,否则可以添加u.upvotes

Select distinct p.wallpaper_id, sum(if(u.wallpaper_id is null, 0, u.upvotes)) as upvotes from contest_participants p
Left join contest_wallpaper_upvote as u
On p.wallpaper_id = u.wallpaper_id AND u.contest_id = 2
Where p.contest_id = 2  group by p.wallpaper_id

答案 1 :(得分:0)

删除distinct。由于您要按wallpaper_id分组,因此没有任何意义。 并将contest_id添加到LEFT JOIN条件。