powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Подсчёт количества детей в иерархической таблице
6 сообщений из 6, страница 1 из 1
Подсчёт количества детей в иерархической таблице
    #39155253
Newint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть вот такая таблица.
id, parentId, type ( департамент или должность ), name.
только департмаент может быть родителем других элементов.
Проблема в том, что посчитать количество детей (только должности) для каждого департамента на всех уровнях ниже, при этом на сервер получать информацию только для первых трёх (в перспективе n) уровней. Пока есть вариант только посчитать сначала для каждого департамента количество непосредственных детей, а уже на сервере рекурсивно обходить всё дерево и находить общее количество детей ниже.
...
Рейтинг: 0 / 0
Подсчёт количества детей в иерархической таблице
    #39155309
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewintПроблема в том, что посчитать количество детей (только должности) для каждого департамента на всех уровнях ниже, при этом на сервер получать информацию только для первых трёх (в перспективе n) уровней.
как надо то?
...
Рейтинг: 0 / 0
Подсчёт количества детей в иерархической таблице
    #39155367
Newint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,
У нас есть 10 уровней вниз. У каждого департамента есть люди.
На самом верхнем уровне должны быть посчитаны все люди на всех уровнях, например 350. На втором и на третьем уровнях тоже и мы должны эти данные получить на сервер. Будет ли посчитано на всех уровнях ниже, не важно.
...
Рейтинг: 0 / 0
Подсчёт количества детей в иерархической таблице
    #39155466
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерно так считать людей непосредственно в отделе
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH RECURSIVE t(id,name,cnt,level) AS(
   SELECT id,name,(SELECT count(*) FROM mytable m1 WHERE m1.parentId=m.id AND m1.type='должность'),1 
   FROM mytable m 
   WHERE m.parentId IS NULL AND type='подразделение'
   UNION ALL
   SELECT id,name,(SELECT count(*) FROM mytable m1 WHERE m1.parentId=m.id AND m1.type='должность'),1+level 
   FROM mytable m,t 
   WHERE m.parentId=t.id AND type='подразделение' AND level<3
)
SELECT * FROM t


если в подзапросе сделать рекурсию то как раз решится ваша задача
...
Рейтинг: 0 / 0
Подсчёт количества детей в иерархической таблице
    #39155469
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправил
bochkovпримерно так считать людей непосредственно в отделе
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH RECURSIVE t(id,name,cnt,level) AS(
   SELECT id,name,(SELECT count(*) FROM mytable m1 WHERE m1.parentId=m.id AND m1.type='должность'),1 
   FROM mytable m 
   WHERE m.parentId IS NULL AND type='подразделение'
   UNION ALL
   SELECT m.id,m.name,(SELECT count(*) FROM mytable m1 WHERE m1.parentId=m.id AND m1.type='должность'),1+level 
   FROM mytable m,t 
   WHERE m.parentId=t.id AND type='подразделение' AND level<3
)
SELECT * FROM t


если в подзапросе сделать рекурсию то как раз решится ваша задача
...
Рейтинг: 0 / 0
Подсчёт количества детей в иерархической таблице
    #39156216
Newint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,
Понял, спасибо. Пока не очень выходит, но буду пробовать!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Подсчёт количества детей в иерархической таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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