Menu
Coddy logo textTech

Критерий 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

Это создаст столбец, который будет нумеровать каждый тип внутри себя:

idtyperow_num
132t11
52t21
92t11
154t31
198t13

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

Задание

Легко

Доступные таблицы и столбцы:

  • <strong>doors</strong>: <strong>id</strong>, <strong>publication_year</strong>
  • <strong>doors_specs</strong>: <strong>id</strong>, <strong>country</strong>, <strong>color</strong>

Завод производит двери. Ему необходимо пронумеровать двери для каждой комбинации country и color, у которых publication_year меньше 2000. Назовите этот столбец row_num.

Двери должны быть пронумерованы внутри каждой группы в порядке возрастания их id. Двери без спецификаций следует игнорировать. Отсортируйте окончательный результат в порядке возрастания по id

Шпаргалка

Используйте PARTITION BY в предложении OVER() для нумерации строк внутри групп:

SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type) as row_num
FROM table1

Вы можете выполнять партиционирование по нескольким столбцам:

ROW_NUMBER() OVER (PARTITION BY type, hue)

Попробуйте сами

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы