几个小时前,我发了一个关于两个表之间的层次结构的问题。这里是链接:https://dev59.com/-4nda4cB1Zd3GeqPGv5X
由于我的原始问题得到了正确和快速的答复,我为我的下一个问题创建了一个新帖子。然而,我被要求不要依赖于另一个问题,所以这里是情景描述:
我有以下几个表格:
create table areas
(
id NUMBER not null,
name VARCHAR2(200) not null,
parent_id NUMBER
);
-- Top Level
Insert into areas (id, name)
Values (1, 'Europe');
Insert into areas (id, name)
Values (2, 'Americas');
Insert into areas (id, name)
Values (3, 'Asia ex Japan');
Insert into areas (id, name)
Values (4, 'Japan');
-- Jurisdictions
Insert into areas (id, name, parent_id)
Values (5, 'UK', 1);
Insert into areas (id, name, parent_id)
Values (7, 'France', 1);
Insert into areas (id, name, parent_id)
Values (6, 'Germany', 1);
Insert into areas (id, name, parent_id)
Values (8, 'Italy', 1);
Insert into areas (id, name, parent_id)
Values (9, 'US', 2);
Insert into areas (id, name, parent_id)
Values (10, 'Australia', 3);
Insert into areas (id, name, parent_id)
Values (11, 'New Zealand', 3);
create table places
(
id NUMBER not null,
name VARCHAR2(200) not null,
area_id NUMBER,
parent_id NUMBER,
no_of_pubs NUMBER
);
Insert into places (id, name, area_id, parent_id)
Values (1, 'London', 5, NULL, 50);
Insert into places (id, name, area_id, parent_id)
Values (2, 'Bath', 5, NULL, 20);
Insert into places (id, name, area_id, parent_id)
Values (3, 'Liverpool', 5, NULL, 32);
Insert into places (id, name, area_id, parent_id)
Values (4, 'Paris', 7, NULL, 64);
Insert into places (id, name, area_id, parent_id)
Values (5, 'New York', 9, NULL, 76);
Insert into places (id, name, area_id, parent_id)
Values (6, 'Chicago', 9, NULL, 5);
Insert into places (id, name, area_id, parent_id)
Values (7, 'Kings Cross', 5, 1, 6);
Insert into places (id, name, area_id, parent_id)
Values (8, 'Tower of London', 5, 1, 0);
以下代码表示数据:
with src as (
select 'A' type, a.id, a.name, a.parent_id, null area_id from areas a
union all
select 'P', -p.id id, p.name, -p.parent_id parent_id, area_id from places p)
select
src.*, level
from
src
start with
type = 'A' and parent_id is null
connect by
parent_id = prior id or
parent_id is null and area_id = prior id
自从上次发布之后,我修改了位置表,使得每个“位置”现在都有一个“酒吧数量”列,那么在层次结构中计算这个最好的方法是什么?
例如,英国将显示108家酒吧,伦敦将显示56家酒吧,国王十字会显示6家酒吧。
希望这解释了我试图实现的内容。
我的当前想法是将“类型”和“ID”传递给一个函数,然后通过循环子记录并加总酒吧来计算结果。
在我开始之前,是否有更好的方法或者我正在正确的轨道上?
编辑:自从我发帖以来,我实际上已经让这个函数工作了,但如果只使用SQL就可以实现的话,我很有兴趣看到它。如果不行,我将发布我的解决方案,但我必须重新调整它,因为我的数据与我的示例不同。
再次感谢。