ここでは、mysql ワークベンチを使用してクエリを作成しました。
USE wcms;
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;
次に、次の結果が表示されます。
ご覧のように、20 ではなく 9 が最高値になるように [プレーヤーのゴール数] 列を並べ替えています。20 がリストの一番上にくるように、この列を整数で並べ替えるにはどうすればよいでしょうか?
この注文ステートメントを試してください
ORDER BY PLA_GS + 0 desc
みなさん、ありがとうございました。問題は、コメントで以前に述べたように、列が間違ったデータ型であったことでした。これは、columnをintに設定することで修正されました。
ALTER TABLE PLAYER MODIFY COLUMN PLAY_GS INT(3);
次に、クエリを実行します。
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;
結果を正しく並べてください。
キャストは適切な解決策です。これは怠け者にも有効です。
ORDER BY PLA_GS+0 DESC
これを試して:
ORDER BY Cast(PLA_GS as int) DESC
クエリ:
USE wcms;
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY Cast(PLA_GS as int) DESC;
この「ソート エラー」(1) は、数値の格納にテキスト データ型を使用している場合に発生します。コマンド
DESCRIBE player;
他の情報とともに、各列にどのデータ型が使用されているかを示します。おそらくvarchar
、この場合のようなテキスト データ型が表示されます。
テーブル構造を変更できる場合は、代わりに のような数値データ型を使用してくださいint
。これにより、並べ替えの問題が解決されます。
さらに、HDD のスペースを節約し、クエリを高速化します。int
s は数値を ascii 形式で保存するよりもはるかに少ないメモリを必要とし (これは、たとえば を使用した場合に発生しますvarchar
)、整数の比較は (おそらく長い) テキスト要素の比較よりもはるかに高速です。
テーブル構造を変更するアクセス権がない場合は、他の回答で既に提供されているキャスト トリックを使用してください。
(1) 実際にはエラーではありません。文字ごとにソートするだけです。