合并多段SQL语句:将多查询合并为单查询以提升效率与关联性
合并多统计查询为单条语句的解决方案
没问题,咱们可以用条件聚合把这些分散的查询合并成一条,既提升查询效率(只需要扫描一次表),又能把所有统计数据放在同一个结果集里,完美保持数据关联性。
基础全局统计版本
如果只是要全局的总测试数、通过数等统计,直接用下面的语句:
SELECT COUNT(`teststatus`) AS `total tested`, COUNT(CASE WHEN `teststatus` = 0 THEN 1 END) AS `passed`, -- 示例:如果有失败状态(比如teststatus=1),可以继续添加统计项 COUNT(CASE WHEN `teststatus` = 1 THEN 1 END) AS `failed` FROM `testrecord`;
关联site表的分组统计版本
如果需要按每个公司(site表的记录)分别统计测试情况,直接关联site表并分组即可:
SELECT s.company_name, COUNT(tr.teststatus) AS `total tested`, COUNT(CASE WHEN tr.teststatus = 0 THEN 1 END) AS `passed`, COUNT(CASE WHEN tr.teststatus = 1 THEN 1 END) AS `failed` FROM `testrecord` tr LEFT JOIN `site` s ON tr.siteid = s.id GROUP BY s.company_name;
关键逻辑说明
COUNT(teststatus):统计所有非NULL的测试状态记录,也就是总测试次数(如果teststatus字段不会为空,用COUNT(*)效果一样)CASE WHEN ... THEN 1 END:只有当满足条件时才返回1,否则返回NULL;而COUNT函数会自动忽略NULL值,这样就精准统计出符合条件的记录数- 合并后的语句只需要扫描一次
testrecord表,相比原来的多条查询多次扫描,在数据量较大时效率提升非常明显,同时所有统计结果在同一条/同一组记录里,不需要手动关联不同查询的结果
内容的提问来源于stack exchange,提问作者Jason Coigny
相关产品推荐
相关产品推荐

