[pgsql-jp: 31472] Re: グループ化して最小一覧を取得
Tomoyuki Morinaga
Tomoyuki_Morinaga @ justsystem.co.jp
2003年 11月 14日 (金) 18:14:47 JST
森永@ジャストシステムと申します
まず果物ごとの最低価格の一覧を求めた後、
その一覧と yahoya をつきあわせる、
という二段構えにするのはどうでしょうか。
select kuda, santi, kakaku from yahoya,
(select kuda as kuda2, min(kakaku) as minkakaku from yahoya group by kuda)
as yahoya2
where kuda=yahoya2.kuda and kakaku=yahoya2.minkakaku;
> 渡辺(雄)@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 メーリングリストの案内