Menu
CoddyTech

PARTITION BY 分区条件

Coddy 高级 SQL 课程的第 5 课,共 13 课。

OVER () 的另一个选项是 PARTITION BY

它可以让我们分别为每个分组中的行编号 

例如:

idtype
132t1
52t2
92t1
154t3
198t1
SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type) as row_num
FROM table1

这会生成一列,为每种类型分别编号:

idtyperow_num
132t11
52t21
92t12
154t31
198t13

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 升序为行编号:

idtyperow_num
132t12
52t21
92t11
154t31
198t13

现在,id 132 的 row_num 是 2,因为它大于 92,小于 198。

我们甚至可以在 PARTITION BY 中指定多个列:

ROW_NUMBER() OVER (PARTITION BY type, hue)
challenge icon

挑战

简单

一家工厂正在制造门。它需要为 publication_year 早于 2000 年的每个 country 和 color 组合中的门编号。将这一列命名为 row_num。

忽略没有规格的门。按 id 升序排列结果。 

亲手试试

高级 SQL中的所有课

自己练习: Python 在线编译器