[前][次][番号順一覧][スレッド一覧]

mysql:8431

From: "Kawaji, Shinya" <"Kawaji, Shinya" <kawaji@xxxxxxxxxx>>
Date: Wed, 26 Nov 2003 12:55:36 +0900
Subject: [mysql 08431] Re: 並び替えについての SQL 文

かわじ、です。


> >  1) フロントエンドで順位を数える。
> >     (1行結果を取り出すごとに、順位の変数をインクリメントする)
> 
> この方法は、テーブルにカラムを追加して、表示するたびに
> UPDATEするという方法ですね。
> できれば毎回UPDATEをせずに取得したいのですが..

いや、それでも良いんですが、言わんとしていたことは、

  テーブル内には順位は保存せず、表示などの処理の際にだけ、
  アプリケーション側で順位を計算して、それを使用(表示)する

という意味です。

「順位付け」そのものが、継続して使用するのではなかったら(アプリケーショ
ンで毎回計算して良かったなら)、テーブルにカラムは用意しなくても
いいと思います。


> >  2) 同じテーブルを join する(比較するものがダブっていないことが前提)
> >     select count(*) as rank, t1.name, t1.height
> >     from order_test as t1, order_test as t2
> >     where t1.height >=  t2.height
> >     group by t1.name, t1.height
> >     order by count(*)
> 
> こちらの方法も試してみました。
> order byについてなのですが、前からcount(*)を指定すると下記のような
> エラーが出ていました。
> 
> mysql > select count(*) as rank from order_test order by count(*);
> ERROR 1111: Invalid use of group function

サンプルが間違っていました。失礼しました。

"Invalid use of group function" というのは、「無効なグループ関数の使用」
ということで、今回の場合は order by にグループ関数を使っていたことが
良くなかったです。

ということで、実際には以下のようになります。
(height がユニークではない部分は、少しおかしくなっていますが)

mysql> select count(*) as rank, t1.name, t1.height
    -> from order_test as t1, order_test as t2
    -> where t1.height >= t2.height
    -> group by t1.name, t1.height
    -> order by rank;
+------+------+--------+
| rank | name | height |
+------+------+--------+
|    1 | F    |    151 |
|    2 | A    |    162 |
|    3 | B    |    163 |
|    6 | C    |    164 |
|    6 | D    |    164 |
|    6 | E    |    164 |
|    7 | H    |    172 |
|    8 | G    |    175 |
|    9 | I    |    180 |
+------+------+--------+
9 rows in set (0.00 sec)



[前][次][番号順一覧][スレッド一覧]

      8419 2003-11-23 20:18 ["Kuroda, Akira" <AK1] RE:  並び替えについての SQL  文         
      8423 2003-11-25 11:51 ┗[Satoshi Iwanaga <iwa]                                       
      8427 2003-11-25 21:42  ┗["Kawaji, Shinya" <ka]                                     
      8428 2003-11-25 21:58   ┗[Satoshi Iwanaga <iwa]                                   
      8429 2003-11-25 22:31    ┗["Kawaji, Shinya" <ka]                                 
      8430 2003-11-26 11:21     ┗[Satoshi Iwanaga <iwa]                               
->    8431 2003-11-26 12:55      ┗["Kawaji, Shinya" <ka]                             
      8432 2003-11-26 16:10       ┗[〓〓〓〓 〓〓 〓〓] Access のテーブルから入力すると #Deleted と表示される