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

MySQL中NTH_VALUE函数首行返回null的原因解析

为什么NTH_VALUE生成的列首行值为null?

核心原因:窗口框架的默认范围限制

你使用的NTH_VALUE(salary,2) OVER(ORDER BY salary ASC)语句中,默认的窗口框架范围是从结果集开头到当前行(RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),这是SQL中窗口函数仅指定ORDER BY时的默认行为。

  • 对于结果的第一行(工资2800的Jenifer),当前窗口里只有这一行数据,不存在第2条记录,因此NTH_VALUE无法找到目标值,返回null。
  • 从第二行开始,窗口范围包含了前两行数据(2800和3000),此时第2个排序后的工资值就是3000;后续所有行的窗口范围都至少包含前两行,因此NTH_VALUE始终返回3000。

让首行也显示目标值的方法

如果希望所有行都能获取到排序后的第2个工资值,可以显式指定窗口框架覆盖整个结果集:

SELECT first_name, last_name, role_, dept, salary, 
       NTH_VALUE(salary,2) OVER(ORDER BY salary ASC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) 
FROM emp_table;

调整后窗口会包含所有行的数据,首行也能直接找到排序后的第2个工资值3000。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:15:38