Oracle 2 计数

Oracle 2 counts

我有2个table如下:

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 是 children 的可归档列表的 table。但是我不想存档任何 tab_b

中还没有全部 children 的 parent
  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

我想你想要一个 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()