1

ここでは、mysql ワークベンチを使用してクエリを作成しました。

USE wcms;
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;

次に、次の結果が表示されます。

ここに画像の説明を入力

ご覧のように、20 ではなく 9 が最高値になるように [プレーヤーのゴール数] 列を並べ替えています。20 がリストの一番上にくるように、この列を整数で並べ替えるにはどうすればよいでしょうか?

4

5 に答える 5

7

この注文ステートメントを試してください

ORDER BY PLA_GS + 0 desc
于 2013-03-17T17:26:01.547 に答える
0

みなさん、ありがとうございました。問題は、コメントで以前に述べたように、列が間違ったデータ型であったことでした。これは、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;

結果を正しく並べてください。

于 2013-03-18T01:38:50.730 に答える
0

キャストは適切な解決策です。これは怠け者にも有効です。

ORDER BY PLA_GS+0 DESC
于 2013-03-17T17:27:19.847 に答える
0

これを試して:

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;
于 2013-03-17T17:47:01.723 に答える
0

この「ソート エラー」(1) は、数値の格納にテキスト データ型を使用している場合に発生します。コマンド

DESCRIBE player;

他の情報とともに、各列にどのデータ型が使用されているかを示します。おそらくvarchar、この場合のようなテキスト データ型が表示されます。

テーブル構造を変更できる場合は、代わりに のような数値データ型を使用してくださいint。これにより、並べ替えの問題が解決されます。

さらに、HDD のスペースを節約し、クエリを高速化します。ints は数値を ascii 形式で保存するよりもはるかに少ないメモリを必要とし (これは、たとえば を使用した場合に発生しますvarchar)、整数の比較は (おそらく長い) テキスト要素の比較よりもはるかに高速です。

テーブル構造を変更するアクセス権がない場合は、他の回答で既に提供されているキャスト トリックを使用してください。

(1) 実際にはエラーではありません。文字ごとにソートするだけです。

于 2013-03-17T17:49:51.133 に答える