Функция NTILE
Часть раздела Основы путешествия по SQL на Coddy — урок 67 из 72.
NTILE(n) нумерует строки, разделяя их на n примерно равных частей. Часто используется для повышения производительности — отправка большого объёма данных сразу может быть не лучшей идеей, поэтому эта функция позволяет отправлять меньшие порции за раз.
Например:
| id | level |
| 1 | 4 |
| 2 | 4 |
| 3 | 5 |
| 4 | 6 |
| 5 | 7 |
| 6 | 7 |
SELECT id, level, NTILE(3) OVER (ORDER BY level) as pieces
from table1Это вернёт:
| id | level | pieces |
| 1 | 4 | 1 |
| 2 | 4 | 1 |
| 3 | 5 | 2 |
| 4 | 6 | 2 |
| 5 | 7 | 3 |
| 6 | 7 | 3 |
Мы получили 3 группы: уровень 4 в группе 1, уровни 5 и 6 в группе 2 и уровень 7 в группе 3.
Когда количество строк не делится поровну на n, NTILE распределяет строки как можно более равномерно, причем более крупные группы располагаются первыми. Например, если у вас 9 строк и NTILE(4), распределение будет следующим:
- Группа 1: 3 строки
- Группа 2: 2 строки
- Группа 3: 2 строки
- Группа 4: 2 строки
Это гарантирует, что никакая группа не отличается от любой другой группы более чем на одну строку, и любые дополнительные строки распределяются сначала по группам с меньшими номерами.
Задание
ЛегкоДоступные таблицы и столбцы:
<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 строки
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Больше ключевых слов
Ключевое слово INКлючевое слово BETWEENКлючевое слово LIKEКлючевое слово ASПовторение - Модели мобильных телефонов2Условия
Основы условийКлючевое слово ANDКлючевое слово ORКлючевое слово NOTКомбинирование нескольких условийСкобкиБулевы значения5Арифметические операции
Математические операторыМатематические столбцыОперация moduloФункция ROUND()3Специальный формат возврата
Значения NULLСортировка результатов, часть 1Сортировка результатов, часть 2Повторение - Фирма по кибербезопасностиОграничение количества записейПовторение - Автозавод6Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцов9Несколько таблиц
Базовый JOIN, Часть 1Базовый JOIN, Часть 2Повторение - JOINСамосоединениеПовторение - СамосоединениеОбъединениеУпрощение запросов, ключевое слово WITHПовторение - Запросы WITHПовторение - Подрядчик по недвижимости12Оконные функции, часть 2
Функции RANK и DENSE_RANKПовторение - RANK и DENSE_RANKФункция NTILEАгрегатные функцииКритерии ROWS и RANGE