嗨,我有下表
现金表
ID Cash Rates
1 50 3
2 100 4
3 70 10
3 60 10
4 13 7
5 20 8
5 10 10
6 10 5
我想要的结果是像这样累积所有具有 Count(id)> 1 的条目:
ID New_Cash New_Rates
1 50 3
2 100 4
3 (70+60)/(10+10) 10+10
4 13 7
5 (20+10)/(8+10) 8+10
6 10 5
所以我只想更改Count(id)> 1的行,其余的保持原样。
对于count(id)> 1的行,我想对比率求和,取现金总和除以比率总和。仅凭费率就不成问题,因为我可以对它们进行汇总并按id分组,以获得所需的结果。
问题出在现金栏上
我正在尝试使用case语句来执行此操作,但是它不起作用:
select id, sum(rates) as new_rates, case
when count(id)>1 then sum(cash)/nullif(sum(rates),0))
else cash
end as new_cash
from Cash_table
group by id
答案 0 :(得分:2)
您只需要group by id
并进行汇总:
select
id,
sum(cash) / (case count(*) when 1 then 1 else sum(rates) end) as new_cash,
sum(rates) as new_rates
from Cash_table
group by id
order by id
请参见demo。
答案 1 :(得分:1)
您可以通过rate
函数汇总cash
和sum()
列并按ID分组
select
id,
sum(cash)/decode( sum( nvl(rates,0) ), 0 ,1, sum( nvl(rates,0) )) as new_cash,
sum(rates) as new_rates
from cash_table
group by id
nullif()
函数,请改用nvl()
decode()
函数)
被零除的可能性