Menu
CoddyTech

Критерий PARTITION BY

Часть раздела Основы путешествия по SQL на Coddy. Урок 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, потому что это наименьшее значение id в type t1.

Примечание: ROW_NUMBER() требует наличия предложения ORDER BY внутри OVER(), чтобы определить, как следует нумеровать строки внутри каждого раздела.

Мы можем даже указать несколько столбцов внутри 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