TGViewer
SQLite на практике SQLite на практике @sqliter · 2.25K subscribers
Post #39 2.57K
🤔 Задачка о группах

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

Рассмотрим на конкретном примере. Есть таблица с атрибутами пользователей:

user_id, attr
1, alpha
1, beta
2, beta
2, gamma
3, delta
3, epsilon
4, delta
4, zeta
5, zeta
5, alpha
6, iota
7, iota
7, kappa
8, kappa
8, lambda


Хотим объединить пользователей в группы. При этом действуют правила:

— Если пользователи A и B обладают общим свойством → они входят в одну группу.
— Если A и B обладают общим свойством P1, B и C обладают общим свойством P2 → A, B, C входят в одну группу.
— Идентификатором группы считается минимальный идентификатор из входящих в нее пользователей.

Для каждой группы хотим еще определить список атрибутов ее пользователей.

В итоге должно получиться две группы:

group_id, user_id, attrs
1, 1, "alpha,beta,gamma,delta,epsilon,zeta"
1, 2, "alpha,beta,gamma,delta,epsilon,zeta"
1, 3, "alpha,beta,gamma,delta,epsilon,zeta"
1, 4, "alpha,beta,gamma,delta,epsilon,zeta"
1, 5, "alpha,beta,gamma,delta,epsilon,zeta"
6, 6, "iota,kappa,lambda"
6, 7, "iota,kappa,lambda"
6, 8, "iota,kappa,lambda”


За сколько запросов возьметесь решить задачу? Каждый CTE или подзапрос считается за отдельный запрос. Использовать процедурные расширения SQL вроде pl/sql и pl/pgSQL — нельзя.

Опрос следует.
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 →