如何合并三个SQL查询,一次性获取关联表的累计统计总数?
合并SQL查询获取总计记录数的方案
这事儿好办,咱们可以用几种不同的SQL写法一步到位算出你要的总计69条记录,我给你列几个常用且高效的方案:
方案一:使用IN子查询(最直观)
直接在group表的查询里嵌套子查询,筛选出对应contextId=53的所有chain_id,然后统计总数:
SELECT COUNT(id) AS total_count FROM `group` WHERE chain_id IN (SELECT id FROM chain WHERE contextId=53);
注意:
group是SQL的关键字,所以需要用反引号(`)把表名括起来,避免语法报错。
方案二:使用JOIN关联表(性能更优)
通过关联chain和group两张表,直接过滤出符合条件的记录并统计:
SELECT COUNT(g.id) AS total_count FROM `group` g JOIN chain c ON g.chain_id = c.id WHERE c.contextId=53;
这里给表起了别名g(代表group)和c(代表chain),让SQL语句更简洁。如果你的表上有合适的索引(比如chain.contextId、group.chain_id),这种JOIN方式的性能会比子查询更好。
方案三:分组统计后求和(适合需要同时看单个chain统计的场景)
如果之后你还想看到每个chain_id对应的记录数,同时得到总计,可以先分组统计再求和:
SELECT SUM(count_result) AS total_count FROM ( SELECT COUNT(id) AS count_result FROM `group` WHERE chain_id IN (SELECT id FROM chain WHERE contextId=53) GROUP BY chain_id ) AS sub_query;
这个查询会先算出每个符合条件的chain_id对应的记录数(也就是46和23),然后把这两个数相加得到总计69。
以上三种方法都能满足你的需求,根据实际场景选就行~
内容的提问来源于stack exchange,提问作者Belhanda
相关产品推荐
相关产品推荐

