[pgsql-jp: 34403] Re: WHERE句がことなるが同一GROUP BY でくくりたい
TANIDA Yutaka
tanida @ sra.co.jp
2004年 12月 6日 (月) 13:52:33 JST
谷田です。一つ回答が出ていますが、
On 6 Dec 2004 11:27:55 +0900
<it_555_it @ excite.co.jp> wrote:
> こんな感じでSQLを発行しています。
>
> SELECT id, sum(initial_cost) FROM tbl
> WHERE start_day BETWEEN '2003/3/1' AND '2004/1/1'
> GROUP BY id
>
> id | sum
> ---------+---------
> 101 | 35000
> 102 | 0
> 103 | 3210200
> 105 | 10000
> 106 | 240000
> 108 |
>
> SELECT sum(rental_price) FROM tbl
> WHERE start_day <= '2004/1/1'
> GROUP BY id
>
> id | sum
> ---------+------
> 103 | 5000
>
> WHERE句が同一であれば、
>
> SELECT id, sum(initial_cost) AS ini, sum(rental_price)AS ren FROM tbl
> WHERE start_day <= '2004/1/1'
> GROUP BY id
>
> と1行で書けるわけですが、
> 上記のように条件が異なる場合、
> 1回のSQLで書くことってできないんでしたっけ。
>
> id | ini | ren
> ---------+----------------------
> 101 | 35000
> 102 | 0
> 103 | 3210200 | 5000
> 105 | 10000
> 106 | 240000
> 108 |
>
> こんな風に出てくると幸せだなあ、などと。
もう一つの作戦として、より汎用的な副問い合わせ+JOINを使う方法もあります。
こんな感じだと思いますが。
select * from
(
SELECT id, sum(initial_cost) as ini FROM tbl
WHERE start_day BETWEEN '2003/3/1' AND '2004/1/1'
GROUP BY id
) a
full outer join
(
SELECT id, sum(rental_price)AS ren FROM tbl
WHERE start_day <= '2004/1/1' GROUP BY id
) b
using (id);
--
TANIDA Yutaka <tanida @ sra.co.jp>
pgsql-jp メーリングリストの案内