Menu
Coddy logo textTech

Функция NTILE

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

NTILE(n) нумерует строки, разделяя их на n примерно равных частей. Часто используется для повышения производительности — отправка большого объёма данных сразу может быть не лучшей идеей, поэтому эта функция позволяет отправлять меньшие порции за раз.

Например:

idlevel
14
24
35
46
57
67
SELECT id, level, NTILE(3) OVER (ORDER BY level) as pieces
from table1

Это вернёт:

idlevelpieces
141
241
352
462
573
673

Мы получили 3 группы: уровень 4 в группе 1, уровни 5 и 6 в группе 2 и уровень 7 в группе 3.
Когда количество строк не делится поровну на n, NTILE распределяет строки как можно более равномерно, причем более крупные группы располагаются первыми. Например, если у вас 9 строк и NTILE(4), распределение будет следующим:

  • Группа 1: 3 строки
  • Группа 2: 2 строки
  • Группа 3: 2 строки
  • Группа 4: 2 строки

Это гарантирует, что никакая группа не отличается от любой другой группы более чем на одну строку, и любые дополнительные строки распределяются сначала по группам с меньшими номерами.

challenge icon

Задание

Легко

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

  • <strong>creatures</strong>: <strong>creature_name</strong>, <strong>preference</strong>, <strong>has_legs</strong> (содержит 'YES' или 'NO')

В этом вызове у нас есть существа, которые хотят найти значимого другого. Нам нужно помочь им найти свою пару.

Каждое существо имеет предпочтение, представленное числом. Если у обоих существ число достаточно близкое, они могут быть хорошей парой.

Разделите существ на 3 группы на основе их значений предпочтений, но учитывайте только существ с ногами (где has_legs = 'YES'). Верните creature_name, preference и их group_number (1, 2 или 3). Отсортируйте результаты по preference по возрастанию.

Шпаргалка

Функция NTILE(n) разделяет строки на n примерно равные группы, нумеруя их последовательно:

SELECT column1, column2, NTILE(3) OVER (ORDER BY column2) as group_number
FROM table_name

Когда строки не делятся поровну на n, NTILE распределяет их как можно равномернее, причем большие группы идут первыми. Например, при 9 строках и NTILE(4):

  • Группа 1: 3 строки
  • Группа 2: 2 строки
  • Группа 3: 2 строки
  • Группа 4: 2 строки

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

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

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

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