带有其他求和列的Oracle SQL查询

时间:2013-09-19 20:31:55

标签: sql oracle

假设我有一个包含USER_ID和AMOUNT列的表。对于每一行,AMOUNT列中可能有正数或负数。

我正在寻找一种从这个表中选择的方法,使得结果具有id,金额的总和,仅正值的总和,每个USER_ID的负值的总和。我可以很容易地做一个求和,但我想弄清楚如何做最后两列。

我还是SQL的新手。我知道一些基础知识,但我对这个问题感到难过。我有一种感觉,我不能用一个SELECT语句来做到这一点。任何帮助都会很棒。

2 个答案:

答案 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

你需要这样的东西。