2017-06-20 14 views
0

私は、ユーザーの口座残高の合計または平均を計算する単純なタスクを持っています。正の値と負の値の和を選択してください:postgres

ユーザーは、その月にマイナスの残高またはプラスの残高を持つ可能性があります。ここで私は、負の値を選択

    1. にしたいと思います

      95.63 
      97.13 
      72.14 
      45.04 
      20.04 
      10.63 
      -29.37 
      -51.35 
      -107.55 
      -101.35 
      -157.55 
      -159.55 
      -161.55 
      

      今月中にユーザーバランスの一例であり、その合計を計算/平均

    2. は正の値を選択し、それらの合計/平均を計算する

    3. 2列で表現する

    4. 私は UNION演算子を使用する場合

    望ましい結果

    340.61  -768.27 
    

    、私は2つの行を取得します。 CASE.. WHEN..を使用すると残高がグループ化され、複数の行が表示されます。

    私は自分のpostgresクエリに他の集計関数を持っているので、それぞれを別々の列に表示したいと思います。 これを行う方法はありますか?

  • 答えて

    1
    v=# select sum(case when f < 0 then f end) n, sum(case when f >= 0 then f end) p from s170; 
        n | p 
    ---------+-------- 
    -768.27 | 340.61 
    (1 row) 
    

    これは..なぜ2回使用しないのですか? Postgresの9.1に

    1

    select 
        sum(case when val >= 0 then val end) as positive, 
        sum(case when val < 0 then val end) as negative 
    from the_data; 
    

    9.4+ Postgresのための代替的な解決策:

    select 
        sum(val) filter (where val >= 0) as positive, 
        sum(val) filter (where val < 0) as negative 
    from the_data; 
    
    関連する問題