17,377
社区成员
发帖
与我相关
我的任务
分享
SELECT A.id, COUNT(B.a_id)
FROM A, B
WHERE A.id = B.a_id(+)
GROUP BY A.id;
SQL> with a as (select 1 id, 'zhangsan' name from dual
2 union
3 select 2 id, 'lisi' name from dual
4 union
5 select 3 id, 'wangwu' name from dual
6 ),
7 b as (select 1 id, 1 a_id, 2009 year from dual
8 union
9 select 2 id, 1 a_id, 2010 year from dual
10 union
11 select 3 id, 2 a_id, 2009 year from dual
12 union
13 select 4 id, 2 a_id, 2010 year from dual
14 )
15 select a.id, nvl(b.count_id, 0) count_id
16 from a, (select a_id, count(a_id) count_id from b group by a_id) b
17 where a.id = b.a_id(+)
18 /
ID COUNT_ID
---------- ----------
1 2
2 2
3 0
SQL>
SQL> with a as
2 (
3 select 1 id ,'张三' name from dual union all
4 select 2 id ,'李四' name from dual union all
5 select 3 id ,'王五' name from dual
6 ),b as
7 (
8 select 1 id,1 a_id,'2009' year from dual union all
9 select 2 id,1 a_id,'2010' year from dual union all
10 select 3 id,2 a_id,'2009' year from dual union all
11 select 4 id,2 a_id,'2010' year from dual
12 )
13 select a.id a_id, count(a_id)
14 from a, b
15 where a.id = b.a_id(+)
16 group by a.id
17 /
A_ID COUNT(A_ID)
---------- -----------
1 2
2 2
3 0
SQL>
---A(id,name) B(id,a_id,year)
select a.id,count(b.a_id)
from a left join b on a.id=b.a_id
group by a.id
select a.id,nvl(b.n,0) 人数
from a,(select a_id,count(*) n from b group by a_id ) b
where a.id=b.a_id(+)