@prochanev

Как найти самый длинный префикс среди строк и сгруппировать по нему?

Всем привет! Уже заспамил весь гугл, но, то что он выдал, не смог применить.
Смог только найти, что подобная задача называется Longest common prefix(LCP)

Есть таблица example:
+----+-----------+------------------------+
| id | parent_id | path                   |
+----+-----------+------------------------+
| 1  | 7         | val10/val11/val12/val3 |
| 2  | 7         | val1/val2/val3/val5    |
| 3  | 7         | val1/val2/val3/val6    |
| 4  | 7         | val1/val2/val3/val7    |
| 5  | 7         | val1/val2/val3/val8    |
| 6  | 7         | val1/val2/val3/val9    |
+----+-----------+------------------------+

Как сгруппировать строки по самому длинному префиксу в столбце path относительно parent_id? Под префиксом имеется ввиду повторяющаяся часть строки начиная с начала.

Для таблицы выше вывод должен быть:
+-----------+------------------------+-------+
| parent_id | path                   | count |
+-----------+------------------------+-------+
| 7         | val1/val2/val3         | 5     |
| 7         | val10/val11/val12/val3 | 1     |
+-----------+------------------------+-------+

для генерации примера:
create table example (id int, parent_id int, path varchar(50));

insert into example
select 1, 7, 'val10/val11/val12/val3'
union select 2, 7, 'val1/val2/val3/val5'
union select 3, 7, 'val1/val2/val3/val6'
union select 4, 7, 'val1/val2/val3/val7'
union select 5, 7, 'val1/val2/val3/val8'
union select 6, 7, 'val1/val2/val3/val9'


Возможно, кто-то встречался с такой задачей, отзовитесь! )
  • Вопрос задан
  • 660 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Пригласить эксперта
Ответы на вопрос 2
@d-stream
Готовые решения - не подаю, но...
гм,,, select path, count(*) from example group by path ?
или я что-то в условиях не совсем понял?
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Как по мне - задача поставлена неверно. Или не хватает доп-условий. Например я считаю что общий префикс должен быть такой.

+-----------+------------------------+-------+
| parent_id | path                   | count |
+-----------+------------------------+-------+
| 7         | val1                   | 6     |
+-----------+------------------------+-------+
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы