我有两张桌子
table A
name id
ABC 1
PQR 2
XYZ 1
QWE 2
DFG 3
另一张桌子 表B
id idname
1 stuart
2 bob
3 alex
预期产出
id idname count
1 stuart 2
2 bob 2
3 alex 1
我使用oracle 9i,是否有可能获得预期的结果? 我尝试过使用distinct关键字,但它没有帮助,因为它只提供总计数
答案 0 :(得分:0)
这很简单。 Join
和count
:
select b.id,
b.idname,
count(*) as cnt
from table_a a
join table_b b on a.id = b.id
group by b.id, b.idname;
如果你需要表b中的所有记录,即使表a中没有相应的行,你也可以使用外连接:
select b.id,
b.idname,
count(a.id) as cnt
from table_a a
right join table_b b on a.id = b.id
group by b.id, b.idname;
使用左连接可以实现同样的效果:
select b.id,
b.idname,
count(a.id) as cnt
from table_b b
left join table_a a on a.id = b.id
group by b.id, b.idname;
答案 1 :(得分:0)
使用JOIN
从两个表中获取数据,并将汇总函数COUNT
与GROUP BY
一起使用。
<强>查询强>
select t1.id, t1.idname, count(t2.name) as count
from TableB t1
left join TableA t2
on t1.id = t2.id
group by t1.id, t1.idname
order by count(t2.name) desc, t1.id;;