推荐答案
SQL 中常用的窗口函数包括:
- ROW_NUMBER(): 为每一行分配一个唯一的序号,从1开始。
- RANK(): 为每一行分配一个排名,相同的值会有相同的排名,后续排名会跳过。
- DENSE_RANK(): 类似于
RANK()
,但不会跳过后续排名。 - NTILE(n): 将结果集分成
n
个桶,并为每一行分配一个桶号。 - LAG(column, offset, default): 返回当前行之前的某一行的值,
offset
指定向前偏移的行数,default
为默认值。 - LEAD(column, offset, default): 返回当前行之后的某一行的值,
offset
指定向后偏移的行数,default
为默认值。
本题详细解读
ROW_NUMBER()
ROW_NUMBER()
函数为每一行分配一个唯一的序号,通常用于生成行号或分页查询。例如:
SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num, employee_id, salary FROM employees;
RANK()
RANK()
函数为每一行分配一个排名,相同的值会有相同的排名,后续排名会跳过。例如:
SELECT RANK() OVER (ORDER BY salary DESC) AS rank, employee_id, salary FROM employees;
DENSE_RANK()
DENSE_RANK()
函数类似于 RANK()
,但不会跳过后续排名。例如:
SELECT DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank, employee_id, salary FROM employees;
NTILE(n)
NTILE(n)
函数将结果集分成 n
个桶,并为每一行分配一个桶号。例如:
SELECT NTILE(4) OVER (ORDER BY salary DESC) AS bucket, employee_id, salary FROM employees;
LAG(column, offset, default)
LAG()
函数返回当前行之前的某一行的值。offset
指定向前偏移的行数,default
为默认值。例如:
SELECT LAG(salary, 1, 0) OVER (ORDER BY employee_id) AS previous_salary, employee_id, salary FROM employees;
LEAD(column, offset, default)
LEAD()
函数返回当前行之后的某一行的值。offset
指定向后偏移的行数,default
为默认值。例如:
SELECT LEAD(salary, 1, 0) OVER (ORDER BY employee_id) AS next_salary, employee_id, salary FROM employees;