Назад к вопросам
Middle
68
questionbank

Расскажи об основных функциях ранжирования в Transact-SQL.

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

ROW_NUMBER() нумерует строки в результирующем наборе секции, начиная с 1 для первой строки.

RANK() присваивает каждой строке ранг в пределах ее секции. Если у двух или более строк одинаковое значение в выражении ORDER BY, им присваивается один и тот же ранг, и следующий ранг пропускается.

DENSE_RANK() аналогична RANK(), но не пропускает ранги при наличии повторяющихся значений.

NTILE(n) распределяет строки в секции на определенное количество (n) групп и присваивает каждой строке номер группы (ведро), начиная с 1.

-- Пример использования ROW_NUMBER
SELECT
    ProductName,
    Price,
    ROW_NUMBER() OVER (ORDER BY Price) AS RowNum
FROM
    Products;

-- Пример использования RANK
SELECT
    ProductName,
    Price,
    RANK() OVER (ORDER BY Price) AS RankNum
FROM
    Products;

-- Пример использования DENSE_RANK
SELECT
    ProductName,
    Price,
    DENSE_RANK() OVER (ORDER BY Price) AS DenseRankNum
FROM
    Products;

-- Пример использования NTILE
SELECT
    ProductName,
    Price,
    NTILE(4) OVER (ORDER BY Price) AS NtileGroup
FROM
    Products;
Функция Описание Пропуск рангов при дубликатах
ROW_NUMBER() Присваивает уникальный последовательный номер каждой строке в секции. Нет
RANK() Присваивает ранг каждой строке. Пропускает следующий ранг при дубликатах. Да
DENSE_RANK() Присваивает ранг каждой строке. Не пропускает следующий ранг при дубликатах. Нет
NTILE(n) Разделяет строки на n групп и присваивает номер группы. Нет