关于N176第二高薪水

SQL窗口函数相关

1. OVER关键字

  • OVER 是窗口函数的核心,定义计算范围
  • 语法:窗口函数() OVER (窗口定义)
  • 可包含 PARTITION BYORDER BY、窗口框架

2. 窗口函数类型

  • 官方内置RANK(), DENSE_RANK(), ROW_NUMBER()
  • 聚合函数SUM(), AVG() 等加上 OVER 也可作为窗口函数
  • 用户自定义:存在但很少使用

MySQL语法规则

3. 保留关键字处理

  • rank 是MySQL保留字,用作别名需加反引号 `rank`
  • 或避免使用保留字作为标识符

4. 派生表别名

  • 每个子查询(派生表)必须有别名
  • 语法:(SELECT ...) AS alias_name

NULL值处理

5. 空结果集 vs NULL值

  • 空结果集(0行)≠ NULL值
  • IFNULL() 只能处理NULL值,不能处理空结果集

6. 标量子查询

  • 用括号包围:SELECT (子查询) AS column
  • 只能返回一行一列
  • 关键特性:空结果集自动转换为NULL
  • 这是处理"不存在记录时返回NULL"的标准方法

实际应用

7. 第N高问题的解决方案

-- 方案1:LIMIT + OFFSET(推荐)
SELECT (SELECT DISTINCT salary FROM employee ORDER BY salary DESC LIMIT 1 OFFSET 1) AS SecondHighestSalary;

-- 方案2:窗口函数 + 标量子查询
SELECT (SELECT salary FROM (SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS rk FROM employee) t WHERE rk = 2 LIMIT 1) AS SecondHighestSalary;

这些知识点在处理排名、分析类SQL问题时非常实用!

posted @ 2025-07-21 10:33  TsumugiHane  阅读(17)  评论(0)    收藏  举报