Перейти к содержимому
Последнее обновление

DENSE_RANK

Описание​

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

Синтаксис​

DENSE_RANK()

Возвращаемое значение​

Возвращает значение ранга типа BIGINT, начиная с 1.

Примеры​

Подготовка: создайте таблицу int_t и загрузите строки, используемые в примере:

CREATE TABLE int_t (x INT, y INT)
DISTRIBUTED BY HASH(x) BUCKETS 1
PROPERTIES ("replication_num" = "1");

INSERT INTO int_t VALUES
(1, 1), (1, 2), (1, 2),
(2, 1), (2, 2), (2, 3),
(3, 1), (3, 1), (3, 2);
select x, y, dense_rank() over(partition by x order by y) as rank from int_t;

Одинаковые значения внутри секции получают одинаковый ранг, а ранги идут подряд, без пропусков (этим DENSE_RANK отличается от RANK):

+------+------+------+
| x | y | rank |
+------+------+------+
| 1 | 1 | 1 |
| 1 | 2 | 2 |
| 1 | 2 | 2 |
| 2 | 1 | 1 |
| 2 | 2 | 2 |
| 2 | 3 | 3 |
| 3 | 1 | 1 |
| 3 | 1 | 1 |
| 3 | 2 | 2 |
+------+------+------+