Menu
Coddy logo textTech

Функции RANK и DENSE_RANK

Часть раздела Основы путешествия по SQL на Coddy. Урок 65 из 72.

ROW_NUMBER() — это один из типов ранжирующих функций, а есть ещё два: RANK() и DENSE_RANK().

Функция RANK() нумерует строки подобно ROW_NUMBER(), но присваивает одинаковые номера одинаковым строкам и пропускает номера. DENSE_RANK() похожа на RANK(), но не пропускает номера.

Например:

idlevel
15
26
36
47
57
65
SELECT id, 
	ROW_NUMBER() OVER (ORDER BY level) as row_num,
	RANK() OVER (ORDER BY level) as row_rank,
	DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1

Это вернёт:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

Объяснение:

  • ROW_NUMBER(): всегда уникальные значения: 1, 2, 3, 4, 5, 6
  • RANK():
    • уровень 5 (2 строки): обе получают ранг 1
    • уровень 6 (2 строки): обе получают ранг 3 (пропускается 2)
    • уровень 7 (2 строки): обе получают ранг 5 (пропускается 4)
  • DENSE_RANK():
    • уровень 5 (2 строки): обе получают ранг 1
    • уровень 6 (2 строки): обе получают ранг 2 (без пропусков)
    • уровень 7 (2 строки): обе получают ранг 3 (без пропусков)
challenge icon

Задание

Легко

Доступные таблицы и столбцы:

  • medals: region, medal_color, medal_count

Создайте запрос, который показывает регион, общее количество медалей (сумму всех медалей независимо от цвета) и два типа ранжирования:

  1. A regular_rank (с пропусками) по сумме медалей
  2. A dense_rank (без пропусков) по сумме медалей

Отсортируйте результат по:

order by total_medals desc, region asc

Попробуйте сами

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Песочница SQL