我的数据如下:Number(String),Number2(String),Transaction Type(String),Cost(Integer)
在此处输入图片描述
对于数字1,费用10和-10会被抵消,因此剩余费用为100
对于数字2,费用50和-50取消,费用87和-87取消
第3位,费用仍为274
对于第4个,费用316和-316取消,费用仍为313
如何在SQL中执行此操作?
我尝试过“ sum(price)”并按“ number”进行分组,但是由于其他列,oracle不允许我得到结果
https://datascience.stackexchange.com/questions/47572/filtering-unique-row-values-in-sql
答案 0 :(得分:1)
进行汇总查询时,您必须为每一列选择一个值-通过将其包含在group by
中或将其包装在汇总函数中。
尚不清楚您要在输出中的第2列和第3列显示什么,但是从示例数据来看,您似乎正在使用MAX,所以这就是我在这里所做的。
select number, max(number2), max(transaction_type), sum(cost)
from my_data
group by number
having sum(cost) <> 0;
答案 1 :(得分:0)
您快要到了……您需要获取每个数字的总和,而无需其他列,然后再加入表中。
select * from table t
join
(select number,sum(cost)
from table
group by number) sums on sums.number=t.number
答案 2 :(得分:0)
您可以使用相关子查询:
select t.*
from table t
where t.cost = (select sum(t1.cost) from table t1 where t1.number = t.number);
答案 3 :(得分:0)
Oracle具有与first()
相当好的功能。 。 。但是语法有点麻烦:
select number,
max(number2) keep (dense_rank first order by cost desc) as number2,
max(transaction_type) keep (dense_rank first order by cost desc) as transaction_type,
max(cost) as cost
from t
group by number;
根据我的经验,keep
具有良好的性能特征。