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

为何GROUP BY后SELECT的MAX()未生效?SQL查询问题咨询

SQL错误分析:找出无重复最大数字的问题排查

原语句的执行流程

数据库执行你写的SQL时,步骤是这样的:

  1. 读取mynumbers表的所有数据行。
  2. 按num字段分组——每个不同的num值单独成为一个分组,比如所有值为1的行会被分到一组,值为6的行(如果只出现一次)单独成组。
  3. 用HAVING COUNT(num)=1过滤分组:只保留那些分组内只有一行数据的组,也就是只保留出现过一次的num值对应的分组。
  4. 对每个通过过滤的分组执行MAX(num):但每个分组里只有一个num值(因为分组依据就是num,且分组行数为1),所以MAX(num)返回的就是该分组的num值本身。最终结果自然是所有无重复的num列表,而非其中的最大值。

核心问题

你错误地在分组后直接对单个分组取最大值,而没有先收集所有无重复的num,再对这个集合取最大值。

正确写法

方法1:嵌套子查询

先筛选出所有无重复的num,再在外层查询取最大值:

SELECT MAX(num)
FROM (
    SELECT num
    FROM mynumbers
    GROUP BY num
    HAVING COUNT(num) = 1
) AS unique_numbers;

方法2:窗口函数(适用于MySQL 8.0+、PostgreSQL等支持窗口函数的数据库)

先给每个num标记出现次数,再筛选出次数为1的num并取最大值:

SELECT MAX(num) AS max_num
FROM (
    SELECT 
        num,
        COUNT(*) OVER (PARTITION BY num) AS occurrence_count
    FROM mynumbers
) AS num_counts
WHERE occurrence_count = 1;

内容的提问来源于stack exchange,提问作者Henry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:29:56