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