TGViewer
SQLite на практике SQLite на практике @sqliter · 2.25K subscribers
Post #99 2.59K
SQL-рецепт: Сегментация данных

Предположим, мы хотим разбить данные на несколько сегментов, ориентируясь на значения в столбцах.

Решение — использовать функцию ntile() поверх SQL-окна.

Пример

Разобьем сотрудников из таблицы employees на три группы в зависимости от размера зарплаты:

— высокооплачиваемые,
— средние,
— низкооплачиваемые.

select
ntile(3) over w as tile,
name, salary
from employees
window w as (order by salary desc)
order by salary desc, id;


t  sal  name
1 120 Иван
1 104 Леонид
1 104 Марина
1 100 Анна
2 96 Вероника
2 96 Григорий
2 90 Ксения
3 84 Елена
3 78 Борис
3 70 Дарья


ntile(n) разбивает все записи на n групп и возвращает номер группы для каждой записи. Если общее количество записей (10 в нашем случае) не делится на размер группы (3), то первые группы будут крупнее последних.

Нюансы

— ntile() всегда старается разбить данные так, чтобы группы были одинакового размера. Поэтому записи с одинаковым значением з/п вполне могут попасть в разные (соседние) группы.

— Если СУБД не поддерживает инструкцию window, можно встроить определение окна: ntile(3) over (order by ...)

→ Оконные функции SQL
  • 👍 16
  • 🔥 3
More from @sqliter
  1. May 20, 2025fuzzy: Нечеткое сравнение строк в SQLite Расширение nalgeon/fuzzy помогает сравнивать стро…
  2. May 14, 2025fileio: Работа с файлами в SQLite Расширение nalgeon/fileio добавляет в SQLite возможность…
  3. May 10, 2025define: Пользовательские функции в SQLite Как известно, в SQLite нет хранимых процедур. Пр…
  4. May 7, 2025crypto: Хеши, кодирование и декодирование в SQLite Открываю новую серию заметок. В каждом…
  5. Aug 8, 2024Работа с датой и временем в SQLite В sqlite есть встроенные функции для работы с датами, н…
  6. May 8, 2024Современный SQLite: Вычисляемые столбцы Вычисляемые (generated) столбцы рассчитываются на…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →