我从a
中提取b
,c
和table_1
。让我们说,a
代表汽车模型。
现在我想从table_2
添加人们支付这辆车的总金额以及拥有这辆车的人数。
这样做比我更优雅吗?我不喜欢我的事实
访问table_2
两次,并认为必须有一个更简单的方法。
我想补充一点,我在Oracle 11g数据库上工作,我与之合作的用户不允许创建视图,程序等。
select my_selection.*,
( select sum(amount)
from table_2 t2
where t2.a = t1.a ) as sum_buying_price,
( select count(*)
from table_2 t2
where t2.a = t1.a ) as count_car_owners
from ( select a,
b,
c
from table_1 t1
) my_selection
谢谢!
答案 0 :(得分:4)
我假设a,b,c在table_1中是唯一的
select t1.a, t1.b, t1.c, sum(amount), count(*)
from table_1 t1
left join table_2 t2
on t2.a = t1.a
group by t1.a, t1.b, t1.c
答案 1 :(得分:3)
如果a b c
是唯一的,您可以使用此
select t1.a, t1.b, t1.c, sum(amount), count(*)
from table_1 t1
left join table_2 t2
on t2.a = t1.a
group by t1.a, t1.b, t1.c
注意left join
,好像没有记录,内连接不会返回此行。
编辑:很抱歉得到了另一个答案(但没有对Paparazzi的回答发表评论),还没有足够的回复发表评论。
P.S。当count(*)
返回0时,sum(amount)
会返回null
。可以用nvl修复:
nvl(sum(amount), 0)
答案 2 :(得分:1)
我认为你正在寻找这样的东西:
select t1.a,
t1.b,
t1.c,
sum_buying_price,
count_car_owners
from table_1 t1
inner join
( select a,
sum(amount) as sum_buying_price,
count(*) as count_car_owners
from table_2
group by a
) t2 on t1.a = t2.a
我没有要测试的oracle数据库,你没有提供相关的表格结构或样本数据,所以我无法真正测试它。
答案 3 :(得分:-1)
试试这个,
select my_selection.*,
( select sum(amount)
from table_2 t2
where t2.a = my_selection.a ) as sum_buying_price,
( select count(*)
from table_2 t2
where t2.a = my_selection.a ) as count_car_owners
from ( select a,
b,
c
from table_1
) my_selection