Oracle 2很重要

时间:2015-01-13 14:44:48

标签: sql oracle count multiple-tables

我有两张表如下:

create table tab_a
(
    a_child varchar2(20),
    a_parent varchar2(20)
);

create table tab_b
(
    a_child varchar2(20)
);

使用以下数据:

insert into tab_a values ('tom','dick snr');
insert into tab_a values ('dick jnr','dick snr');
insert into tab_a values ('harry','dick snr');

insert into tab_a values ('bob','fred');
insert into tab_a values ('ann','fred');

insert into tab_b values ('bob');
insert into tab_b values ('ann');
insert into tab_b values ('harry');

我希望结果如下:

a_parent | total of children in tab_a | total of children in tab_b

dick snr | 3                          | 1

fred     | 2                          | 2

- 注意:tab_a将包含tab_b所具有的所有值和更多值。实际上,tab_b是一个可存档的子项列表。但是,我不想归档任何没有在tab_b中拥有所有孩子的家长

  SELECT ta.a_parent, COUNT (*) AS total_child_count, (select 'x' from dual)
    FROM tab_a ta
GROUP BY ta.a_parent

我想解决上面的x ...它可能是一个连接的情况,但它需要考虑a_parent

1 个答案:

答案 0 :(得分:2)

我认为你想要一个left join和一个有两个计数的聚合:

select a.a_parent, count(a.a_child) as Achildren, count(b.a_child) as Bchildren
from tab_a a left join
     tab_b b
     on a.a_child = b.a_child
group by a.a_parent;

如果表格中有重复的行,则应使用count(distinct)代替count()