PARTITION BY 分区依据
本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 59 课,共 72 课。
OVER () 子句的另一个选项是 PARTITION BY
它可以让我们分别为每个组中的行编号
例如:
| id | type |
| 132 | t1 |
| 52 | t2 |
| 92 | t1 |
| 154 | t3 |
| 198 | t1 |
SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type ORDER BY id) as row_num
FROM table1这会生成一列,按 id 顺序分别为每种类型的行编号(下方结果按类型分组显示):
| id | type | row_num |
| 92 | t1 | 1 |
| 132 | t1 | 2 |
| 198 | t1 | 3 |
| 52 | t2 | 1 |
| 154 | t3 | 1 |
id 92 的 row_num 是 1,因为它是 type 为 t1 的记录中最小的 id。
注意:OVER() 中的 ORDER BY 是可选的。不使用它时,每个分区中的行仍会被编号,但顺序无法保证。
我们甚至可以在 PARTITION BY 中指定多个列:
ROW_NUMBER() OVER (PARTITION BY type, hue ORDER BY id)挑战
简单可用的表和列:
doors:id、publication_yeardoors_specs:id、country、color
一家工厂正在生产门。它需要为每个 country 和 color 组合中 publication_year 小于 2000 的门编号。将这一列命名为 row_num。
每组中的门应按 id 升序编号。忽略没有规格信息的门。最终结果也按 id 升序排序。
亲手试试
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
11窗口函数第 1 部分
ROW_NUMBER 函数ORDER BY 排序依据PARTITION BY 分区依据PARTITION 与 ORDERLEAD 与 LAG 函数回顾:LEAD 与 LAG回顾:图片回顾:方框自己练习: SQL 在线编辑器