PARTITION BY 分区条件
Coddy 高级 SQL 课程的第 5 课,共 13 课。
OVER () 的另一个选项是 PARTITION BY
它可以让我们分别为每个分组中的行编号
例如:
| id | type |
| 132 | t1 |
| 52 | t2 |
| 92 | t1 |
| 154 | t3 |
| 198 | t1 |
SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type) as row_num
FROM table1这会生成一列,为每种类型分别编号:
| id | type | row_num |
| 132 | t1 | 1 |
| 52 | t2 | 1 |
| 92 | t1 | 2 |
| 154 | t3 | 1 |
| 198 | t1 | 3 |
id 92 的 row_num 是 2,因为它是 type 为 t1 的第二行
我们还可以将 PARTITION BY 与 ORDER BY 结合使用:
SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type ORDER BY id) as row_num
FROM table1这会按每种类型的 id 升序为行编号:
| id | type | row_num |
| 132 | t1 | 2 |
| 52 | t2 | 1 |
| 92 | t1 | 1 |
| 154 | t3 | 1 |
| 198 | t1 | 3 |
现在,id 132 的 row_num 是 2,因为它大于 92,小于 198。
我们甚至可以在 PARTITION BY 中指定多个列:
ROW_NUMBER() OVER (PARTITION BY type, hue)挑战
简单一家工厂正在制造门。它需要为 publication_year 早于 2000 年的每个 country 和 color 组合中的门编号。将这一列命名为 row_num。
忽略没有规格的门。按 id 升序排列结果。
亲手试试
高级 SQL中的所有课
4总结
最终挑战 #1自己练习: Python 在线编译器