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

标签 mysql join

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

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/

相关文章:

php - MYSQL 只返回最后一行?

sql - 如何在 MySQL 中执行 FULL OUTER JOIN?

php - Codeigniter MySQL 连接复杂

php - 获取多边形点mysql

javascript - Node js在查询记录时自动将MySQL中的GMT格式日期转换为本地格式

c# - 如何计算数据库中列的字符长度并将它们放入 datagridview 中显示的新列中

MySQL JOIN 三张表,包括一个WHERE?

mysql - 如何导出指定时间段的MySQL数据?

sql - 如何在列的不同值上联接两个表?

mysql - 连接两个表并应用分组依据,但更改排序顺序