У меня есть таблица SQL, которая похожа на древовидную структуру, я хочу сгруппировать ее и рассчитывать на глубину 2 - PullRequest
0 голосов
/ 02 ноября 2019

Мне удалось сгруппировать дочернюю группу, теперь в том же, я хочу подсчет количества заголовков на основе всех дочерних элементов в этой таблице

Head    child assigned total
In      In1     3       5
In      In2     2       3
In      In3     2       3
In      In4     1       3
In      In5     0       4
In      In6     4       4
In      In7     3       7
In      In8     2       3
Ma      Ma1     2       5
Ma      Ma2     0       5
Usr     us1     4       4
Usr     us2     1       3

Итак, я скопировал назначенный дочерний столбец итогов.

Head    assigned total  child assigned total
In          3       5   In1     3       5
In          2       3   In2     2       3
In          2       3   In3     2       3
In          1       3   In4     1       3
In          0       4   In5     0       4
In          4       4   In6     4       4
In          3       7   In7     3       7
In          2       3   In8     2       3
Ma          2       5   Ma1     2       5
Ma          0       5   Ma2     0       5
Us          4       4   us1     4       4
Us          1       3   us2     1       3

Теперь я хочу сгруппировать родительский элемент 1, поэтому все значения In (In1 - In8) должны быть sum и быть в заголовке assignHead, totalHead

Head    assigned total  child assigned total
In          17      32  In1     3       5
In          17      32  In2     2       3
In          17      32  In3     2       3
In          17      32  In4     1       3
In          17      32  In5     0       4
In          17      32  In6     4       4
In          17      32  In      3       7
In          17      32  In8     2       3
Ma          2       10  Ma1     2       5
Ma          2       10  Ma2     0       5
Us          5       7   us1     4       4
Us          5       7   us2     1       3

или что-то вроде этого, котороеэффективен.

1 Ответ

1 голос
/ 02 ноября 2019

Вы можете сделать сумму окна (если ваша СУБД поддерживает оконные функции):

select 
    head,
    assigned,
    total,
    sum(assigned) over(partition by head) sum_assigned,
    sum(total) over(partition by head) sum_total
from mytable

Демонстрация на DB Fiddle :

head | assigned | total | sum_assigned | sum_total
:--- | -------: | ----: | -----------: | --------:
In   |        3 |     5 |           17 |        32
In   |        2 |     3 |           17 |        32
In   |        2 |     3 |           17 |        32
In   |        1 |     3 |           17 |        32
In   |        0 |     4 |           17 |        32
In   |        4 |     4 |           17 |        32
In   |        3 |     7 |           17 |        32
In   |        2 |     3 |           17 |        32
Ma   |        2 |     5 |            2 |        10
Ma   |        0 |     5 |            2 |        10
Usr  |        4 |     4 |            5 |         7
Usr  |        1 |     3 |            5 |         7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...