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