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

求教:查询第4高薪资教师姓名的SQL子句逻辑解析

解析查询第4高薪资教师的SQL子查询逻辑

这段SQL的核心逻辑是通过统计「比当前教师薪资高的不同薪资数量」,来定位第4高的薪资,拆解来看:

子查询的作用

外层查询会遍历teacher表的每一行(别名T1),对每一行的T1.salary,子查询做的是:

SELECT COUNT(DISTINCT T2.salary)
FROM teacher as T2
WHERE T2.salary > T1.salary

它会统计所有薪资比T1当前行薪资高的、不同薪资值的数量。

为什么=3对应第4高?

我们按薪资从高到低排等级:

  • 第1高薪资:没有比它更高的薪资,统计结果是0
  • 第2高薪资:只有1个比它高的薪资等级,统计结果是1
  • 第3高薪资:有2个比它高的薪资等级,统计结果是2
  • 第4高薪资:正好有3个比它高的薪资等级,统计结果是3

所以当子查询的统计结果等于3时,对应的T1行就是拿第4高薪资的教师。

为什么要用COUNT(DISTINCT ...)?

如果不用DISTINCT,统计的是「比当前薪资高的人数」,但如果有多个教师拿同一高薪,会重复计数。比如两个教师拿10000(最高薪),那对拿9000的教师来说,COUNT(T2.salary)会返回2,但实际只有1个更高的薪资等级。用DISTINCT就能避免这种情况,确保统计的是不同的高薪等级数,让排名更准确。

完整SQL语句:

SELECT name
FROM teacher as T1
WHERE (
SELECT COUNT (DISTINCT T2.salary)
FROM teacher as T2
WHERE T2.salary > T1.salary
) = 3;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:25:32