2

USER_ID と AMOUNT 列を持つテーブルがあるとします。各行の AMOUNT 列には、正または負の金額が表示される場合があります。

結果がID、金額の合計、正の値だけの金額の合計、各USER_IDの負の値だけの金額の合計になるように、このテーブルから選択する方法を探しています。合計は非常に簡単に実行できますが、最後の 2 つの列を実行する方法を理解しようとしています。

私はまだSQLにかなり慣れていません。私はいくつかの基本を知っていますが、これには困惑しています。単一の SELECT ステートメントでこれを行うことはできないと感じています。どんな助けでも素晴らしいでしょう。

4

2 に答える 2

4

LEAST および GREATEST の 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 は、パラメーターのリストから最小値を返します。amount と zero を渡すと、正の数値が除外されます。

GREATEST は、負の数を除外します。

ゼロは平均を変更するため、このソリューションは平均では機能しません。

于 2013-09-19T20:46:17.410 に答える
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

このようなものが必要です。

于 2013-09-20T06:55:15.833 に答える