Функция 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 строки
Это гарантирует, что число строк в любой группе отличается от числа строк в любой другой группе не более чем на одну, а лишние строки в первую очередь распределяются по группам с меньшими номерами.
Задание
ЛегкоДоступные таблицы и столбцы:
creatures:creature_name,preference,has_legs(содержит 'YES' или 'NO')
В этом задании у нас есть существа, которые хотят найти себе пару. Нам нужно помочь им найти подходящую пару.
У каждого существа есть предпочтение, представленное числом. Если числа у двух существ достаточно близки, они могут хорошо подойти друг другу.
Разделите существ на 3 группы на основе значений их предпочтений, но учитывайте только существ с ногами (где has_legs = 'YES'). Верните creature_name, preference и их group_number (1, 2 или 3). Упорядочьте результаты по preference по возрастанию.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
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Потренируйтесь самостоятельно: Песочница SQL