ROW_NUMBER
Уникальная нумерация строк.
ROW_NUMBER() OVER (ORDER BY column)
Выбор 13-й строки по inventory_id.
Summary session 10 повторяет два блока оконных функций: ранжирование и смещение/выбор.
Для ранжирования используем ROW_NUMBER, RANK, DENSE_RANK, NTILE.
Для сравнения соседних строк используем LAG и LEAD; для крайних значений — FIRST_VALUE и LAST_VALUE.
Минимальный пример: DENSE_RANK() OVER (ORDER BY quantity DESC) строит рейтинг по количеству, а LAG(date_received) OVER (ORDER BY date_received) находит предыдущую дату.
Топ-3 ошибки: путать RANK и DENSE_RANK, забывать ORDER BY в окне, фильтровать результат окна до внешнего SELECT.
Команды и функции ниже взяты из темы урока и оформлены как быстрый справочник.
ROW_NUMBERУникальная нумерация строк.
ROW_NUMBER() OVER (ORDER BY column)
Выбор 13-й строки по inventory_id.
RANKРейтинг с пропусками.
RANK() OVER (ORDER BY quantity DESC)
Использовался в домашнем задании для ранга по quantity.
DENSE_RANKРейтинг без пропусков.
DENSE_RANK() OVER (ORDER BY quantity DESC)
Используется для топ-5 продуктов.
NTILEРазделение строк на равные группы.
NTILE(3) OVER (ORDER BY sale_amount)
Повторение из блока ранжирования.
LAGПредыдущее значение.
LAG(date_received) OVER (ORDER BY date_received)
Соседняя дата получения.
LEADСледующее значение.
LEAD(date_received) OVER (ORDER BY date_received)
Соседняя дата получения.
FIRST_VALUEПервое значение окна.
FIRST_VALUE(unit_cost) OVER (PARTITION BY inventory_id ORDER BY unit_cost)
Минимальная цена после сортировки по возрастанию.
Полный справочник курса: SQL Reference. Документация по MongoDB в этом уроке не используется.