高级 SQL 技巧:提升数据查询与分析能力
一、窗口函数(Window Functions)
窗口函数是一种特殊的 SQL 函数,它能够对一组行进行计算,而不需要将这些行聚合为单个输出行。窗口函数通常与 OVER
子句一起使用,定义一个窗口,即一组行的集合。
1. 排名函数
- ROW_NUMBER():为每一行分配一个唯一的序号,序号在窗口内是连续的。
- RANK():为每一行分配一个排名,如果存在相同的值,则排名会跳过(例如,1, 1, 3)。
- DENSE_RANK():与 RANK() 类似,但排名不会跳过(例如,1, 1, 2)。
-- 查询学生考试成绩,并按成绩排名
SELECT student_id, score, RANK() OVER (ORDER BY score DESC) AS rank
FROM exam_scores;
2. 分配函数
- NTILE(n):将窗口内的行划分为 n 个大致相等的组,并为每一行分配一个组号
-- 将学生按成绩分为四组
SELECT student_id, score, NTILE(4) OVER (ORDER BY score) AS quartile
FROM exam_scores;
3. 聚合函数
- SUM()、AVG()、MIN()