从两张不同表统计count(*)并合并结果的SQL问题
解决两行统计结果合并为一行两列的问题
你的原SQL用了UNION,但UNION的作用是按行拼接多个查询结果,而且要求所有查询的列数、数据类型一致,列名以第一个查询的为准。所以你的语句实际返回两行数据(table_a的count和table_b的count),列名都显示为a,并不是只返回第一个结果。
要得到一行两列的格式,有两种常用方法:
方法一:子查询作为列
直接将每个表的统计查询作为结果的一列:
SELECT (SELECT COUNT(*) FROM table_a) AS a, (SELECT COUNT(*) FROM table_b) AS b;
这个写法简洁,每个子查询独立统计对应表的行数,最终输出一行,包含a和b两个列。
方法二:交叉连接(CROSS JOIN)
将两个统计结果作为临时表,通过交叉连接合并成一行:
SELECT t1.a, t2.b FROM (SELECT COUNT(*) AS a FROM table_a) t1 CROSS JOIN (SELECT COUNT(*) AS b FROM table_b) t2;
因为每个临时表只有一行数据,交叉连接后只会生成一行结果,适合后续需要扩展更多表统计的场景。
内容的提问来源于stack exchange,提问作者sayan nandi
相关产品推荐
相关产品推荐

