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