Назад к вопросам
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 групп и присваивает номер группы. | Нет |