gpt4 book ai didi

mysql count with right join返回一些错误的值

转载 作者:行者123 更新时间:2023-11-28 23:26:41 25 4
gpt4 key购买 nike

我在右连接中遇到计数问题,使用这段代码我可以计算有多少访问者有视频

SELECT video_id, COUNT(video_id) AS Views FROM fm_views GROUP BY video_id ORDER BY Views DESC;

它返回以下示例。

video_id    Views
1668306 10
21041317 4
3845 2
13796095 1
16808537 1
11170454 1

这是正确的计数,现在我将示例 2 放在错误的计数中

SELECT fm_video.*, IFNULL(COUNT(fm_views.video_id), 0) AS Views FROM fm_views RIGHT JOIN fm_video ON fm_video.video_id = fm_views.video_id GROUP BY fm_video.video_id ORDER BY Views DESC, id DESC;

这就是问题所在,现在我明白了(没有零值的简化版本)

video_id    Views
1668306 10
21041317 4
3845 >>4<< This is the problem
13796095 1
16808537 1
11170454 1

现在我在视频 3845 中获得 4 次观看,当我在正确的连接后只有 2 个带有该 video_id 的条目时,其余值都可以,但我认为当我在数据库中有更多条目时,我会遇到更多问题有了这个错误的值(value)观

对于这种简单的查询格式,我找不到任何有用的信息。

最佳答案

我发现 right join 很难理解。 left join 看起来更自然,因为它将所有行保留在第一个表中。此外,COUNT() 不能返回 NULL。所以,这是查询:

SELECT vd.*, COUNT(vw.video_id) AS Views
FROM fm_video vd LEFT JOIN
fm_views vw
ON vd.video_id = vw.video_id
GROUP BY vd.video_id
ORDER BY Views DESC, id DESC;

如果这返回了意想不到的结果,则表明您的数据有误,或者您的预期是错误的。

对于第一种可能性,我建议验证 fm_video(video_id) 是表中的主键(或至少是唯一的)。您还可以运行此代码以查看是否存在重复:

select video_id
from fm_video
group by video_id
having count(*) > 1;

您还应该检查 video_id 在两个表中是否具有相同的类型。

关于mysql count with right join返回一些错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39054004/

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