Menu
CoddyTech

PARTITION BY 分区依据

本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 59 课,共 72 课。

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

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

例如:

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

这会生成一列,按 id 顺序分别为每种类型的行编号(下方结果按类型分组显示):

idtyperow_num
92t11
132t12
198t13
52t21
154t31

id 92 的 row_num 是 1,因为它是 type 为 t1 的记录中最小的 id。

注意:OVER() 中的 ORDER BY 是可选的。不使用它时,每个分区中的行仍会被编号,但顺序无法保证。

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

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

挑战

简单

可用的表和列:

  • doors: id、publication_year
  • doors_specs: id、country、color

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

每组中的门应按 id 升序编号。忽略没有规格信息的门。最终结果也按 id 升序排序。 

亲手试试

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: SQL 在线编辑器