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

SQL聚合分组疑问:为何某查询无法正确获取最高收入及人数?

关于SQL分组查询筛选最高总收入的逻辑疑问

需求说明

我们定义员工的总收入为月薪*工作月数,需要编写查询语句获取最高总收入以及达到该收入的员工数量,输出为空格分隔的两个整数。

Employee表结构:
Employee表结构

输出示例:69952 1(最高收入为69952,仅Kimberly达到该收入)

正确查询语句

以下查询可以得到正确结果:

Select salary*months, count(name)
from employee
where salary*months=(Select max(salary*months) from employee)
group by salary*months;

存在疑问的查询语句

以下查询无法得到正确结果,返回的是所有不同总收入的分组及其人数,而非仅最高收入的分组:

Select max(salary*months),count(name)
from employee
group by salary*months;

逻辑差异解释

疑问查询的问题所在

group by salary*months的作用是将所有总收入相同的员工归为一组,比如表中有3种不同的总收入,就会生成3个分组。每个分组执行max(salary*months)时,由于该组内所有员工的总收入完全相同,这个max的结果就是该组的总收入本身;count(name)则是该组的员工数量。最终这个查询会返回所有分组的信息,自然包含了非最高收入的分组,不符合需求。

正确查询的逻辑

  1. 子查询(Select max(salary*months) from employee)先计算出整个表的最高总收入,这是一个全局的单一值。
  2. where子句筛选出所有总收入等于这个全局最大值的员工记录,此时剩下的所有记录的总收入都一致。
  3. 最后通过group by salary*months分组(其实此时所有记录的分组字段值相同,分组后仅一个组),得到最高总收入和对应的员工数量。

额外说明:正确查询中的group by可以省略,因为筛选后的记录总收入都相同,直接执行Select max(salary*months), count(name) from employee where salary*months=(Select max(salary*months) from employee)也能得到相同结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:10:20