You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:38:03