Функция ROW_NUMBER
Часть раздела Основы путешествия по SQL на Coddy — урок 57 из 72.
Оконные функции выполняют вычисления по набору строк таблицы связанных с текущей строкой. В отличие от обычных агрегатных функций, оконные функции не сворачивают результаты в одну строку.
Они особенно полезны, когда вам нужно:
- Вычислять накопительные итоги
- Ранжировать элементы внутри групп
- Сравнивать текущие строки с предыдущими/следующими строками
- Анализировать тенденции за временные периоды
Например, вот некоторые реальные примеры использования оконных функций:
- Анализ продаж
- Вычислить накопленные продажи до каждого года (1995, 1997, 1999)
- Найти самые продаваемые продукты для каждого квартала
- Спортивная статистика
- Отслеживание количества олимпийских медалей за разные годы
- Выявление ведущих атлетов в каждом периоде соревнований (2000, 2004, 2008)
ROW_NUMBER() — одна из самых простых оконных функций. Она присваивает уникальный порядковый номер каждой строке в результирующем наборе. Вот как её использовать:
SELECT column1, column2,
ROW_NUMBER() OVER ([PARTITION BY column] [ORDER BY column]) as row_num
FROM table_name;Обязательно использовать клаузу OVER с ROW_NUMBER(): ROW_NUMBER() OVER ()
Например:
SELECT product_name, sale_date,
ROW_NUMBER() OVER () as row_num
FROM sales;Это добавляет столбец row_num, который нумерует строки от 1 до общего количества строк.
Примечание: Клауза OVER может содержать инструкции по упорядочиванию и партиционированию для управления способом нумерации.
Задание
ЛегкоДоступные таблицы и столбцы:
<strong>liquids</strong>:<strong>id</strong>,<strong>density</strong>
Извлеките все жидкости с плотностью больше 5.677.
Пронумеруйте результат (используйте функцию ROW_NUMBER()) и назовите этот столбец row_num
Шпаргалка
Оконные функции выполняют вычисления по набору строк таблицы, связанных с текущей строкой, без свертки результатов в одну строку.
ROW_NUMBER() присваивает уникальный последовательный номер каждой строке:
SELECT column1, column2,
ROW_NUMBER() OVER ([PARTITION BY column] [ORDER BY column]) as row_num
FROM table_name;Предложение OVER обязательно при использовании ROW_NUMBER():
SELECT product_name, sale_date,
ROW_NUMBER() OVER () as row_num
FROM sales;Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
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Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцов