powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите склеить деревья
5 сообщений из 5, страница 1 из 1
помогите склеить деревья
    #39279438
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть таблица с деревьями (взял из примера)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with astranomy (ltree) as (
    VALUES ('Top'::public.ltree), 
        ('Top.Science'), 
        ('Top.Science.Astronomy'), 
        ('Top.Science.Astronomy.Astrophysics'),
        ('Top.Science.Astronomy.Cosmology'), 
        ('Top.Hobbies'), 
        ('Top.Hobbies.Amateurs_Astronomy'), 
        ('Top.Collections'),
        ('Top.Collections.Pictures'), 
        ('Top.Collections.Pictures.Astronomy'),
        ('Top.Collections.Pictures.Astronomy.Stars'), 
        ('Top.Collections.Pictures.Astronomy.Galaxies'),
        ('Top.Collections.Pictures.Astronomy.Astronauts')
)
select * from astranomy

подскажите как можно агрегировать данные так что бы получились одни листья:ltreeTop.Science.Astronomy.AstrophysicsTop.Science.Astronomy.CosmologyTop.Hobbies.Amateurs_AstronomyTop.Collections.Pictures.Astronomy.StarsTop.Collections.Pictures.Astronomy.GalaxiesTop.Collections.Pictures.Astronomy.Astronauts
например Top.Science.Astronomy - не является листом потому что уже есть записи Top.Science.Astronomy.Cosmology
...
Рейтинг: 0 / 0
помогите склеить деревья
    #39279621
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

вылить воду из чайника

взять(построить) всё дерево (предыдущая задача) и затем выколоть из результата всё, что содержится в хотя бы одном еще листе как корень.
...
Рейтинг: 0 / 0
помогите склеить деревья
    #39279832
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, спасибо большое, получилось)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with astranomy (ltree) as (
    VALUES ('Top'::ltree),
        ('Top.Science'),
        ('Top.Science.Astronomy'),
        ('Top.Science.Astronomy.Astrophysics'),
        ('Top.Science.Astronomy.Cosmology'),
        ('Top.Hobbies'),
        ('Top.Hobbies.Amateurs_Astronomy'),
        ('Top.Collections'),
        ('Top.Collections.Pictures'),
        ('Top.Collections.Pictures.Astronomy'),
        ('Top.Collections.Pictures.Astronomy.Stars'),
        ('Top.Collections.Pictures.Astronomy.Galaxies'),
        ('Top.Collections.Pictures.Astronomy.Astronauts')
)
select a.*, b.* from astranomy a left join astranomy b on a.ltree @> b.ltree and a.ltree<>b.ltree
where b.ltree is null;
...
Рейтинг: 0 / 0
помогите склеить деревья
    #39279835
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убрал повторы)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with astranomy (ltree) as (
    VALUES ('Top'::ltree),
        ('Top.Science'),
        ('Top.Science.Astronomy'),
        ('Top.Science.Astronomy.Astrophysics'),
        ('Top.Science.Astronomy.Cosmology'),
        ('Top.Hobbies'),
        ('Top.Hobbies.Amateurs_Astronomy'),
        ('Top.Hobbies.Amateurs_Astronomy'),
        ('Top.Collections'),
        ('Top.Collections.Pictures'),
        ('Top.Collections.Pictures.Astronomy'),
        ('Top.Collections.Pictures.Astronomy.Stars'),
        ('Top.Collections.Pictures.Astronomy.Galaxies'),
        ('Top.Collections.Pictures.Astronomy.Astronauts')
)
select a.ltree from astranomy a left join astranomy b on a.ltree @> b.ltree and a.ltree<>b.ltree
where b.ltree is null group by a.ltree ;
...
Рейтинг: 0 / 0
помогите склеить деревья
    #39280510
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно использовать оконные функции. На большом объем данных должно быть быстрее, чем self-join.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with astronomy (ltree) as (
    VALUES ('Top'::ltree),
        ('Top.Science'),
        ('Top.Science.Astronomy'),
        ('Top.Science.Astronomy.Astrophysics'),
        ('Top.Science.Astronomy.Cosmology'),
        ('Top.Hobbies'),
        ('Top.Hobbies.Amateurs_Astronomy'),
        ('Top.Hobbies.Amateurs_Astronomy'),
        ('Top.Collections'),
        ('Top.Collections.Pictures'),
        ('Top.Collections.Pictures.Astronomy'),
        ('Top.Collections.Pictures.Astronomy.Stars'),
        ('Top.Collections.Pictures.Astronomy.Galaxies'),
        ('Top.Collections.Pictures.Astronomy.Astronauts')
), astronomy_with_leaf_flag as (
     select lead(ltree) over(order by ltree) <@ ltree as is_not_leaf, ltree from astronomy
)
select ltree from astronomy_with_leaf_flag where is_not_leaf is distinct from true;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите склеить деревья
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]