Критерий PARTITION BY
Часть раздела Основы путешествия по SQL на Coddy — урок 59 из 72.
Другим вариантом для предложения OVER () является PARTITION BY
Это позволяет нам нумеровать строки для каждой группы отдельно
Например:
| id | type |
| 132 | t1 |
| 52 | t2 |
| 92 | t1 |
| 154 | t3 |
| 198 | t1 |
SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type ORDER BY id) as row_num
FROM table1Это создаст столбец, который будет нумеровать каждый тип внутри себя:
| id | type | row_num |
| 132 | t1 | 1 |
| 52 | t2 | 1 |
| 92 | t1 | 1 |
| 154 | t3 | 1 |
| 198 | t1 | 3 |
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)Задание
ЛегкоДоступные таблицы и столбцы:
<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)Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Больше ключевых слов
Ключевое слово INКлючевое слово BETWEENКлючевое слово LIKEКлючевое слово ASПовторение - Модели мобильных телефонов2Условия
Основы условийКлючевое слово ANDКлючевое слово ORКлючевое слово NOTКомбинирование нескольких условийСкобкиБулевы значения5Арифметические операции
Математические операторыМатематические столбцыОперация moduloФункция ROUND()8Статистика
Встроенные агрегатные функции. Часть 1Встроенные агрегатные функции. Часть 2Группировка. Часть 1Группировка. Часть 2Подзапросы. Часть 1Подзапросы. Часть 2Повторение - Магазин общей прибылиПовторение - Магазин скутеровПовторение - Кофейня11Оконные функции, часть 1
Функция ROW_NUMBERКритерий ORDER BYКритерий PARTITION BYPARTITION и ORDERФункции LEAD и LAGПовторение - LEAD и LAGПовторение - КартинкиПовторение - Блоки3Специальный формат возврата
Значения NULLСортировка результатов, часть 1Сортировка результатов, часть 2Повторение - Фирма по кибербезопасностиОграничение количества записейПовторение - Автозавод6Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцов