如何解决如何使用MYSQL计算另外两个表中的条目数?
我有三个桌子。
- 帖子
- 图片
- 投票
我希望能够获得帖子中的所有数据以及票数的总和以及与该帖子关联的图像数。我可以得到一个,但不能一次。
此代码可用于获取帖子的得分
SELECT
posts.*,COALESCE(SUM(votes.value),0) as score
FROM posts
LEFT JOIN votes ON posts.post_id = votes.target_id
GROUP BY posts.post_id
此代码可用于获取帖子旁边的图片数量
SELECT
posts.*,COALESCE(COUNT(images.image_id),0) as num_images
FROM posts
LEFT JOIN images ON posts.post_id = images.belongs_to_post
GROUP BY posts.post_id
但是如果我将两者结合起来
SELECT
posts.*,0) as num_images,0) as score
FROM posts
LEFT JOIN votes ON posts.post_id = votes.target_id
LEFT JOIN images ON posts.post_id = images.belongs_to_post
GROUP BY posts.post_id
score
乘以图像数。我怎样才能有效地阻止这种情况?我必须按另一列分组吗?
我正在使用MySQL 5.7.31。
解决方法
我建议相关的子查询:
SELECT p.*,(SELECT COUNT(*)
FROM images i
WHERE p.post_id = i.belongs_to_post
) as num_images,(SELECT COALESCE(SUM(v.value),0)
FROM votes v
WHERE p.post_id = v.target_id
) as score
FROM posts p;
在images(belongs_to_post)
和votes(target_id,value)
上使用索引,这可能比在外部查询中使用聚合的任何方法都快得多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。