【问题标题】:Hierarchy Query - Aggregate the nodes层次结构查询 - 聚合节点
【发布时间】:2016-02-15 09:42:50
【问题描述】:

在层次查询方面需要帮助,我有 2 个表,一个保存元素之间的层次结构,第二个保存每个元素的活动警报。

create table hrc (parent_id number, child_id number);
insert into hrc (parent_id,child_id) values (null,1);
insert into hrc (parent_id,child_id) values (1,2);
insert into hrc (parent_id,child_id) values (2,0);
insert into hrc (parent_id,child_id) values (0,76292);
insert into hrc (parent_id,child_id) values (0,96689);
insert into hrc (parent_id,child_id) values (0,12429);
insert into hrc (parent_id,child_id) values (0,10697);
insert into hrc (parent_id,child_id) values (0,60856);
insert into hrc (parent_id,child_id) values (0,99460);
insert into hrc (parent_id,child_id) values (76292,57120);
insert into hrc (parent_id,child_id) values (12429,25152);


commit
/
create table alarms (id number,element_id number) ;

insert into alarms (id,element_id) values (1,0);
insert into alarms (id,element_id) values (2,0);
insert into alarms (id,element_id) values (3,0);
insert into alarms (id,element_id) values (4,76292);
insert into alarms (id,element_id) values (5,76292);
insert into alarms (id,element_id) values (6,57120);
insert into alarms (id,element_id) values (7,57120);
insert into alarms (id,element_id) values (8,57120);
insert into alarms (id,element_id) values (9,25152);
insert into alarms (id,element_id) values (10,25152);
insert into alarms (id,element_id) values (11,12429);
commit;

下一个查询代表层次结构

with q (parent_id,child_id, hierlevel,root) as
( 
select parent_id,child_id, 0,child_id root 
from   hrc 
where  parent_id  = 0
UNION ALL  
select  hrc.parent_id,hrc.child_id ,q.hierlevel + 1 , q.root 
       from   hrc
         join
         q
         on (q.child_id=hrc.parent_id)

)select * from q  

我想加入(左外)警报表并获取每个元素的警报计数,但仅针对第一级,例如选择 parent_id=0 所需的输出是:

根数


                   5      76292
                   3      12429
                   0      60856
                   0      10697
                   0      99460
                   0      96689

元素 76292(5) - 他自己和他的孩子 (57120) 的 3 个警报有 2 个。 对于 12429 (3) - 他自己的 1 个和他孩子的 2 个。 其余的有 0 个警报。

首选方式是使用 CTE 而不是通过 .

感谢您的帮助。

【问题讨论】:

    标签: oracle hierarchy common-table-expression


    【解决方案1】:

    您不能在递归 CTE 中进行连接/聚合 - 您会得到 ORA-32486: unsupported operation error。

    您可以保持 CTE 不变,只需将其加入警报表,并按根 ID 分组:

    with a as (...)
    select q.root, count(a.id)
    from q
    left join alarms a on a.element_id = q.child_id
    group by q.root
    order by count(a.id) desc; -- or whatever
    
          ROOT                             COUNT(A.ID)
    ---------- ---------------------------------------
         76292                                       5
         12429                                       3
         99460                                       0
         10697                                       0
         96689                                       0
         60856                                       0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2019-05-02
      • 2020-04-17
      • 2015-10-15
      相关资源
      最近更新 更多