以下是一些高级 SQL 技巧:
一、窗口函数
窗口函数可以在不影响数据分组的情况下,对数据进行排序、聚合等操作,非常强大。
- 排名函数
ROW_NUMBER()
:为每一行分配一个唯一的连续整数序号。RANK()
:计算排序值,如果有相同的值会出现并列排名,并且下一个排名会跳过相应的数量。DENSE_RANK()
:计算排序值,有相同的值会出现并列排名,但下一个排名不会跳过。
例如:
SELECT employee_id, salary,ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num,RANK() OVER (ORDER BY salary DESC) AS rank_num,DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank_num
FROM employees;
- 聚合函数作为窗口函数
- 可以使用
SUM()
、AVG()
、COUNT()
等聚合函数在窗口中进行计算。
- 可以使用
例如,计算每个员工的工资与部门平均工资的差值:
SELECT employee_id, department_id, salary,salary - AVG(salary) OVER (PARTITION BY department_id) AS salary_diff_from_dept_avg
FROM employees;