[pgsql-jp: 32695] Re: unionの合計取得

ISHIDA Akio iakio @ pjam.jpweb.net
2004年 4月 6日 (火) 19:04:32 JST


こんにちは。石田@苫小牧市です。
もう解決したみたいですが、

Tadashi.Kanbayashi wrote:

> 集計条件が異なるものの総和を取得したいです。
> 
> 例えば,
> SQLその1:select a , round(sum(b/9),0) from tab1 where c=1 group by a;
> SQLその2:select a , round(sum(b/5),0)  from tab1 where c=2  group by a;
> で,1と2の合計値を算出したく。
> 
> select a,sum(sum_b)
> from
>     (
>         select a as a, round(sum(b/9),0) as sum_b from tab1 where c = 1
> group by a
>         union
>         select a as a, round(sum(b/5),0) as sum_b from tab1 where c = 2
> group by a
>     ) as union_data
> group by a;

であれば、case when を使うという方法もあります。
ちょっと round() を使う順番がかわってしまうのですが、

SELECT a
     , round(sum(
         CASE WHEN c = 1 THEN b / 9
              WHEN c = 2 THEN b / 5
         END), 0)
   FROM tab1
  GROUP BY a;

でどうでしょうか。
-- 
ISHIDA Akio<iakio @ pjam.jpweb.net>



pgsql-jp メーリングリストの案内