2013-09-19 4 views
2

Предположим, у меня есть таблица с USER_ID и столбцами AMOUNT. Для каждой строки может быть положительная или отрицательная сумма в столбце AMOUNT.Oracle SQL Query with Additional Summation Columns

Я ищу способ выбора из этой таблицы, чтобы результат имел идентификатор, суммирование суммы, суммирование суммы только положительных значений, суммирование суммы только отрицательных значений для каждого USER_ID , Я могу сделать суммирование достаточно легко, но я пытаюсь понять, как делать последние два столбца.

Я до сих пор довольно новичок в SQL. Я знаю некоторые основы, но я в тупике. У меня такое чувство, что я не могу сделать это с помощью одного оператора SELECT. Любая помощь будет большой.

ответ

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 

МЕРЕ возвращает наименьшее значение из списка параметров. Если вы передадите количество и ноль, он будет фильтровать положительные номера.

GREATEST отфильтровывает отрицательные числа.

Это решение не будет работать со средними значениями, так как нули изменят среднее значение.

+0

Прошу прощения, что я не читал ваш запрос правильно раньше. То, как вы это сделаете, будет работать. – Falcon

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 

Что-то вроде этого вам нужно.