Menu
Coddy logo textTech

Функция ROW_NUMBER

Часть раздела Основы путешествия по SQL на Coddy. Урок 57 из 72.

Оконные функции (window functions) выполняют вычисления по набору строк таблицы, связанных с текущей строкой. В отличие от обычных агрегатных функций, оконные функции не объединяют результаты в одну строку.

Они особенно полезны, когда вам нужно:

  • Вычислить скользящие итоги
  • Ранжировать элементы внутри групп
  • Сравнить текущие строки с предыдущими или следующими строками
  • Проанализировать тенденции за определенные периоды времени

Например, вот несколько реальных примеров использования window functions:

  • Анализ продаж
    • Рассчитать кумулятивные продажи для каждого года (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

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

-- Пронумеруйте каждую строку отфильтрованного результата с помощью оконной функции
SELECT id, density, ____ as row_num
FROM liquids
WHERE density > ____
quiz iconПроверьте себя

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

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

Потренируйтесь самостоятельно: Песочница SQL