[pgsql-jp: 31469] Re: グループ化して最小一覧を取得

hirano_kozo hirano_kozo @ tandem-sys.co.jp
2003年 11月 14日 (金) 17:07:25 JST


渡辺さん

limitを使ってはどうでしょうか?

データ数が多いレコードのMAX、MINの取得は関数を使うより
order by でソートした結果に対してlimitをつけて取得し
たほうが早く結果が得られます。


select kuda, santi, kakaku 
from yahoya 
where kakaku=(select kakaku from yahoya b where b.kuda=yahoya.kuda order by kakaku limit 1);

なんかどうでしょうか?

それでも遅ければ、Indexの検討などが必要だと思います

--- pgsql-jp @ ml.postgresql.jp ---

>渡辺(雄)@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 メーリングリストの案内