MySQL分组查询中如何获取分组组数而非每组记录数?
解决方案:获取MySQL分组的组数
当然可以直接在SQL里实现这个需求,而且我们还能顺便优化一下你原查询的写法,让它更规范高效。
首先先说说你原查询里的小问题:你在HAVING子句里过滤Platform和Test Procedure这两个非聚合字段,其实这不符合标准SQL的规范(除非你关闭了ONLY_FULL_GROUP_BY模式,但这并不推荐),而且效率也不如提前在WHERE里过滤——毕竟HAVING是分组后再过滤,而WHERE是分组前就筛选掉不符合条件的行,能减少分组的计算量。
回到你的核心需求:获取分组的组数(也就是不同Order Number的数量,因为你是按Order Number分组的),有两种简单的实现方式:
方法一:子查询统计分组行数
把你的分组逻辑放到子查询里,外层直接统计子查询的行数,就是你要的组数:
SELECT COUNT(*) AS group_count FROM ( SELECT `Order Number` FROM Stage WHERE `StartTime` BETWEEN "2018-4-23" AND DATE_ADD("2018-4-24", INTERVAL 1 DAY) AND Platform = "Kingston" AND `Test Procedure` = "Calibration and test" GROUP BY `Order Number` ) AS grouped_data;
方法二:直接统计唯一分组键的数量
因为你的分组依据是Order Number,所以符合条件的唯一Order Number的数量,就是分组的组数。这种方法更简洁高效,不需要子查询:
SELECT COUNT(DISTINCT `Order Number`) AS group_count FROM Stage WHERE `StartTime` BETWEEN "2018-4-23" AND DATE_ADD("2018-4-24", INTERVAL 1 DAY) AND Platform = "Kingston" AND `Test Procedure` = "Calibration and test";
两种方法都能得到你想要的结果,方法二的执行效率通常更高,因为它避免了子查询的额外开销,直接通过COUNT(DISTINCT)统计符合条件的唯一分组键数量。
内容的提问来源于stack exchange,提问作者user1853330
相关产品推荐
相关产品推荐

