SQL 面试题 目录

SQL 中如何使用窗口函数 (Window Function)?

推荐答案

本题详细解读

什么是窗口函数?

窗口函数(Window Function)是 SQL 中一种强大的工具,允许你在不改变行数的情况下,对一组行进行计算。与聚合函数不同,窗口函数不会将多行合并为一行,而是为每一行返回一个值。

窗口函数的基本语法

  • function_name: 窗口函数的名称,如 RANK(), ROW_NUMBER(), SUM(), AVG() 等。
  • expression: 需要计算的列或表达式。
  • PARTITION BY: 将数据分组,类似于 GROUP BY,但不会减少行数。
  • ORDER BY: 指定窗口内的排序方式。
  • frame_clause: 定义窗口的范围,通常用于滑动窗口计算。

示例解析

在推荐答案中,我们使用了 RANK() 窗口函数来计算每个部门内员工的薪资排名。

  • PARTITION BY department_id: 将数据按 department_id 分组,每个部门内的员工单独计算排名。
  • ORDER BY salary DESC: 在每个部门内,按薪资从高到低排序。
  • RANK(): 计算每个员工在其部门内的排名。

其他常用窗口函数

  1. ROW_NUMBER(): 为每一行分配一个唯一的序号。
  2. DENSE_RANK(): 类似于 RANK(),但不会跳过重复的排名。
  3. SUM(): 计算窗口内某一列的总和。
  4. AVG(): 计算窗口内某一列的平均值。
  5. LEAD() / LAG(): 获取当前行前后某一行的值。

窗口函数的应用场景

  • 排名计算: 如计算销售排名、薪资排名等。
  • 累计计算: 如计算累计销售额、累计利润等。
  • 滑动窗口计算: 如计算移动平均值、移动总和等。
  • 前后值比较: 如比较当前行与前一行的差值。

窗口函数在数据分析、报表生成等场景中非常有用,能够简化复杂的 SQL 查询。

纠错
反馈