Menu
Coddy logo textTech

Функция 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 может содержать инструкции по упорядочиванию и партиционированию для управления способом нумерации.

challenge icon

Задание

Легко

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

  • <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;

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

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

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

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