[pgsql-jp: 33392] 並べ替えについて

shima tetuo mlmlml @ lily.freemail.ne.jp
2004年 6月 26日 (土) 16:15:47 JST


tetuoと言います。

環境
PostgreSQL 7.2.1 on i586-pc-linux-gnu, compiled by GCC 2.96

現在、WEBアプリケーションで商品の一覧を10アイテム1ページとして表示してお
りますが、表示の並び替えで行き詰まってしまい、良い方法がないかと考えてい
ます。


********************
元データ
********************
┌───┬───┐
│商品名│価格  │
├───┼───┤
│A商品 │9800  │
├───┼───┤
│B商品 │7800  │
├───┼───┤
│C商品 │11800 │
├───┼───┤
│A商品 │5800  │
├───┼───┤
│A商品 │3800  │
├───┼───┤
│B商品 │4800  │
└───┴───┘

上の表のようなデータがあり、現状は下の表のように並び替えを行っています。

********************
現状 
(order by 価格 desc, 商品名)
********************
┌───┬───┐
│商品名│価格  │
├───┼───┤
│C商品 │11800 │
├───┼───┤
│A商品 │9800  │
├───┼───┤
│B商品 │7800  │
├───┼───┤
│A商品 │5800  │
├───┼───┤
│B商品 │4800  │
├───┼───┤
│A商品 │3800  │
└───┴───┘


ですが、現在、表示方法として下記のような結果が必要となっています。

********************
ほしい結果
価格の降順をベースに、同一商品名がある場合はそれらを連続して、且つその同
一商品名での価格の降順
********************
┌───┬───┐
│商品名│価格  │
├───┼───┤
│C商品 │11800 │
├───┼───┤
│A商品 │9800  │
├───┼───┤
│A商品 │5800  │
├───┼───┤
│A商品 │3800  │
├───┼───┤
│B商品 │7800  │
├───┼───┤
│B商品 │4800  │
└───┴───┘

アプリケーション側で抽出した10件だけに対して、上記のような並び替えをする
事も検討したのですが、そうすると同一商品名のデータがページをまたいだ際に、
その2つのページ間でのデータの並びが連続しない為、出来る事ならSQLで実現し
たいと思っています。

order byの良い使い方等が分かる方が居ましたら、よろしくお願いします。







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