[pgsql-jp: 35140] Re: テーブルの結合について教えてください

KAWAI,Takanori GCD00051 @ nifty.ne.jp
2005年 3月 28日 (月) 22:50:14 JST


川合孝典です。

すでに解決されているかもしれませんが、こんな手もありかな
ということで...。
select
max(name) AS name,
SUM(CASE count WHEN 1 THEN score ELSE 0 END) as "count=1",
SUM(CASE count WHEN 2 THEN score ELSE 0 END) as "count=2",
SUM(CASE count WHEN 3 THEN score ELSE 0 END) as "count=3",
TRUNC(AVG(score)) As avg
FROM data, no
WHERE no.no=data.no
GROUP BY data.no;

=実行例=
root=> select * from no;
 no | name
----+------
  1 | aaa
  2 | bbb
(2 rows)


root=> select * from data;
 no | count | score
----+-------+-------
  1 |     1 |    50
  1 |     2 |    60
  1 |     3 |   120
  2 |     1 |    70
  2 |     2 |    80
(5 rows)


root=> select data.no as no,
root-> max(name) AS name,
root-> SUM(CASE count WHEN 1 THEN score ELSE 0 END) as "count=1",
root-> SUM(CASE count WHEN 2 THEN score ELSE 0 END) as "count=2",
root-> SUM(CASE count WHEN 3 THEN score ELSE 0 END) as "count=3",
root-> TRUNC(AVG(score)) As avg
root-> FROM data, no
root-> WHERE no.no=data.no
root-> GROUP BY data.no;
 no | name | count=1 | count=2 | count=3 | avg
----+------+---------+---------+---------+-----
  1 | aaa  |      50 |      60 |     120 |  76
  2 | bbb  |      70 |      80 |       0 |  75
(2 rows)

AVGの計算方法が分からなかったんで適当に。


----- Original Message ----- 
From: "切明 裕次" <y-kiriaki @ tec.co.jp>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Friday, March 25, 2005 7:04 PM
Subject: [pgsql-jp: 35131] Re: テーブルの結合について教えてください


> tomsonさん、小田切さん、中村さん、早速回答をいただきありがとうございます。
> 皆さんのお知恵を拝借して以下のようにしてみました。
>
> select user.name,
>  d1.score as c1,
>  d2.score as c2,
>  d3.score as c3,
>  (d1.score + d2.score + d3.score)/3 as avg
>  from user
>   left join (select * from data where count=1) as d1 using(no)
>   left join (select * from data where count=2) as d2 using(no)
>   left join (select * from data where count=3) as d3 using(no)
>
> 結果は以下のようになりました。
> name | c1 | c2 | c3  | avg
> ------+----+----+-----+-----
> aaa  | 50 | 60 | 120 |  76
> bbb  | 70 | 80 |     |
>
> bbbの平均が出ないのですが、勉強がてら考えてみたいと思います。
> 本当にどうもありがとうございました。

===================================================
川合 孝典 (Hippo2000)
   DBI日本語メーリングリスト管理人、Kansai.pm所属
   kwitknr @ cpan.org GCD00051 @ nifty.ne.jp
   http://homepage3.nifty.com/hippo2000/、http://www.hippo2000.info/
perldocの日本語情報ならperldocjp:翻訳してみませんか?
  http://perldocjp.sourceforge.jp/
=================================================== 




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