
SQL (Structured Query Language) — это язык для работы с базами данных. Позволяет выбирать данные и строить сложные отчеты. Сегодня SQL стал универсальным языком данных.
Функции ранжирования (ranking functions)
- row_number( ) — уникальный номер для каждой строки в партиции, с разными номерами для одинаковых значений
- rank( ) – ранжирование внутри партиции с пропусками и одинаковыми значениями ранга для совпадающих значений
- dense_rank( ) – ранжирование внутри партиции без пропусков и с одинаковыми значениями ранга для совпадающих значений
Поведение ORDER BY и границ окна (window frame): функции rank( ) и dense_rank( ) требуют наличия оператора ORDER BY, но функция row_number( ) может работать без ORDER BY (но обычно его добавляют для предсказуемости). Все ранжирующие функции (rank, row_number, dense_rank) не поддерживают определение границ окна (rows, range, groups)

Аналитические функции
- lead( выражение, offset, default ) — значение для смещения строк (offset) после текущей; offset и default необязательны; ( offset = 1, default = NULL)
- lag( выражение, offset, default ) — значение строки, расположенной на указанное смещение (offset) строк перед текущей; offset и default необязательны; ( offset = 1, default = NULL)

- ntile( n ) — разделить строки внутри партиции максимально равномерно на n групп и назначить каждой строке номер её группы.

Поведение ORDER BY и границ окна (window frame): функции lead, ntile, lag требуют указания конструкции ORDER BY. Они не поддерживают определение границ окна (rows, range, groups)
Функции распределения
- percent_rank( ) — возвращает ранг строки в виде процентиля (число от 0 до 1), вычисляемый по формуле: (rank-1) / (общее_количество_строк — 1)
- cume_dist( ) — вычисляет кумулятивное (накопленное) распределение значения в группе. Это доля строк со значениями меньшими или равными текущему значению, от общего числа строк.

Поведение ORDER BY и границ окна (window frame): функции распределения требуют указания конструкции ORDER BY. Они не поддерживают определение границ окна (rows, range, groups)
- first_value( выражение ) — значение первой строки в рамках окна (window frame)
- last_value ( выражение ) — значение последней строки в рамках окна (window frame)

обратите внимание: обычно следует использовать RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING с функцией last_value(). При стандартном фрейме окна для ORDER BY (RANGE UNBOUNDED PRECEDING) функция last_value() возвращает значение текущей строки.
- nth_value( выражение, n ) — значение n-ной строки в пределах фрейма окна; n должно быть целым числом

Поведение ORDER BY и границ окна (window frame): функции first_value, last_value, nth_value не требуют указания конструкции ORDER BY. Они поддерживают определение границ окна (rows, range, groups)
