如何使用MYSQL计算另外两个表中的条目数?

如何使用MYSQL计算另外两个表中的条目数?,mysql,sql,database,Mysql,Sql,Database,我有三张桌子 职位 图像 投票 我希望能够获得帖子中的所有数据,以及投票总数和和帖子相关的图片数量。我可以得到一个或另一个,但不能同时得到两个 此代码用于获取帖子的分数 选择 员额。*, 合并(总和(票数值),0)作为分数 发帖 posts.post\u id=vots.target\u id上的左连接投票 按posts.post\u id分组 这段代码用于获取帖子旁边的图像数量 选择 员额。*, 合并(计数(images.image\u id),0)为num\u图像 发帖 左连接post

我有三张桌子

  • 职位
  • 图像
  • 投票
我希望能够获得帖子中的所有数据,以及投票总数和和帖子相关的图片数量。我可以得到一个或另一个,但不能同时得到两个

此代码用于获取帖子的分数

选择
员额。*,
合并(总和(票数值),0)作为分数
发帖
posts.post\u id=vots.target\u id上的左连接投票
按posts.post\u id分组
这段代码用于获取帖子旁边的图像数量

选择
员额。*,
合并(计数(images.image\u id),0)为num\u图像
发帖
左连接posts.post\u id=images.belient\u to\u post上的图像
按posts.post\u id分组
但是如果我把两者结合起来

选择
员额。*,
合并(计数(images.image_id),0)为num_图像,
合并(总和(票数值),0)作为分数
发帖
posts.post\u id=vots.target\u id上的左连接投票
左连接posts.post\u id=images.belient\u to\u post上的图像
按posts.post\u id分组
得分
乘以图像数量。我如何才能有效地阻止这种情况?我必须按另一列分组吗


我正在使用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;

使用
图像(属于\u post)
投票(target\u id,value)
上的索引,这可能比在外部查询中使用聚合的任何方法都快得多。

我建议相关子查询:

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;
使用
图像(属于\u post)
投票(target\u id,value)
上的索引,这可能比在外部查询中使用聚合的任何方法都要快得多