[pgsql-jp: 27965] Re: 集計表で結合するには

Takao Kato sirius @ jp.fujitsu.com
2002年 11月 13日 (水) 14:15:36 JST


 加藤@川崎です。

..snip..

> SELECT tbl1.id,tbl2.name FROM tbl1,tbl2 WHERE tbl1.id = tbl2.id
> ORDER BY tbl1.id;
> 
> までは分かりましたが、目的が集計なんでこれは使えません。

なんの集計がとりたいのでしょうか? ^^;

単純にnameな人がいくつテーブルに登録されているかなら、

select tbl2.name,count(tbl2.name) from tbl1,tbl2
 where tbl1.id = tbl2.id
 group by (tbl2.name)
 order by tbl2.name;     <= order by count(tbl2.name) でも良いけど

で。idの合計が必要なら count(tbl2.name)をsum(tbl1.id) に置き換えればOK
でしょう。

エラーメッセージにもでていますが、
> 
> tbl2.name must be GROUPed or used in an aggregate function
>
集約関数を使う以上、集約関数でまとめたカラムを対象にしないといけません
よね。


もし、idとnameを同時に出力したいなら、

select id,name,s.cnt from tbl2
 left outer join (
   select id,count(*) as cnt from tbl1
 ) s using(id);

かな。(わざわざleft outer join使わんでもいいだろうに > 自分)
----
加藤@川崎
お便りは kato @ lantc.cs.fujitsu.co.jp まで



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