假设我有一个包含USER_ID和AMOUNT列的表。对于每一行,AMOUNT列中可能有正数或负数。
我正在寻找一种从这个表中选择的方法,使得结果具有id,金额的总和,仅正值的总和,每个USER_ID的负值的总和。我可以很容易地做一个求和,但我想弄清楚如何做最后两列。
我还是SQL的新手。我知道一些基础知识,但我对这个问题感到难过。我有一种感觉,我不能用一个SELECT语句来做到这一点。任何帮助都会很棒。
答案 0 :(得分:4)
最低和最强大的Oracle功能可以解决问题(不确定它们只是ANSI或Oracle):
select
user_id
sum(amount) total,
sum(least(amount,0)) total_negs,
sum(greatest(amount,0)) total_pos
from
my_table
group by
user_id
LEAST返回参数列表中的最小值。如果您传递金额和零,它将过滤正数。
GREATEST将过滤掉负数。
此解决方案不适用于平均值,因为零会改变平均值。
答案 1 :(得分:1)
select
user_id
sum(amount) total,
sum(case when amount < 0 then amount else 0 end) total_negs,
sum(case when amount > 0 then amount else 0 end) total_pos
from
my_table
group by
user_id
你需要这样的东西。