通过组合两个表来计算表中的类似值

时间:2017-10-23 08:11:04

标签: sql oracle count oracle9i

我有两张桌子

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关键字,但它没有帮助,因为它只提供总计数

2 个答案:

答案 0 :(得分:0)

这很简单。 Joincount

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从两个表中获取数据,并将汇总函数COUNTGROUP 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;;