Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Подсчёт количества детей в иерархической таблице / 6 сообщений из 6, страница 1 из 1
26.01.2016, 09:40
    #39155253
Newint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт количества детей в иерархической таблице
Добрый день.
Есть вот такая таблица.
id, parentId, type ( департамент или должность ), name.
только департмаент может быть родителем других элементов.
Проблема в том, что посчитать количество детей (только должности) для каждого департамента на всех уровнях ниже, при этом на сервер получать информацию только для первых трёх (в перспективе n) уровней. Пока есть вариант только посчитать сначала для каждого департамента количество непосредственных детей, а уже на сервере рекурсивно обходить всё дерево и находить общее количество детей ниже.
...
Рейтинг: 0 / 0
26.01.2016, 10:49
    #39155309
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт количества детей в иерархической таблице
NewintПроблема в том, что посчитать количество детей (только должности) для каждого департамента на всех уровнях ниже, при этом на сервер получать информацию только для первых трёх (в перспективе n) уровней.
как надо то?
...
Рейтинг: 0 / 0
26.01.2016, 11:47
    #39155367
Newint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт количества детей в иерархической таблице
bochkov,
У нас есть 10 уровней вниз. У каждого департамента есть люди.
На самом верхнем уровне должны быть посчитаны все люди на всех уровнях, например 350. На втором и на третьем уровнях тоже и мы должны эти данные получить на сервер. Будет ли посчитано на всех уровнях ниже, не важно.
...
Рейтинг: 0 / 0
26.01.2016, 13:17
    #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
26.01.2016, 13:19
    #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
27.01.2016, 09:22
    #39156216
Newint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт количества детей в иерархической таблице
bochkov,
Понял, спасибо. Пока не очень выходит, но буду пробовать!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Подсчёт количества детей в иерархической таблице / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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