[pgsql-jp: 31468] グループ化して最小一覧を取得
Watanabe Takehiro
takk @ ntt-it.co.jp
2003年 11月 14日 (金) 16:48:52 JST
渡辺(雄)@NTT-ITです
以下のようなテーブルがあります。
「果物の種類」「その産地」「価格」「その他」の列があります。
果物の種類ごとに、一番安い価格とその産地を取り出すために以下のSQLを
書いたのですが、実際のテーブルは6840行で
結果を得るまでに20分ほどかかってしまっています。
もっと早く結果を得るにはどのようにしたらよいでしょうか?
バージョンは PostgreSQL 7.3 on i686-pc-linux-gnu, compiled by GCC 2.96 です
kuda | santi | dummy1 | kakaku
-------+-------+--------+--------
ringo | tokyo | a | 100
ringo | chiba | b | 100
ringo | saita | c | 90
ringo | kanag | a | 80
ringo | gunma | b | 70
ringo | ibara | c | 70
mikan | tokyo | a | 200
mikan | chiba | b | 200
mikan | saita | c | 190
mikan | kanag | a | 180
mikan | gunma | b | 170
mikan | ibara | c | 170
nashi | tokyo | a | 110
nashi | chiba | b | 110
nashi | saita | c | 100
nashi | kanag | a | 90
nashi | gunma | b | 80
nashi | ibara | c | 80
meron | tokyo | a | 60
meron | chiba | b | 60
meron | saita | c | 55
meron | kanag | a | 50
meron | gunma | b | 45
meron | ibara | c | 45
上のテーブルでは
ringo | tokyo | a | 100
ringo | tokyo | a | 90
の様に、果物と産地が重複することはありません。
考えたSQL文
select kuda, santi, kakaku
from yahoya
where kakaku=(select min(kakaku) from yahoya b where b.kuda=yahoya.kuda);
得たい結果
kuda | santi | kakaku
-------+-------+--------
ringo | gunma | 70
ringo | ibara | 70
mikan | gunma | 170
mikan | ibara | 170
nashi | gunma | 80
nashi | ibara | 80
meron | gunma | 45
meron | ibara | 45
よろしくお願いします
pgsql-jp メーリングリストの案内