[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 メーリングリストの案内