priceという名前の列がvarchar
と入力されたテーブルがあります。この列の最大値が必要です。私はこのクエリを使用しています:
SELECT MAX(price) FROM product_management.`item_list`
しかし、結果は間違っています。この問題を解決してください。
[SB] SQLyog Ultimate Ver。を使用しています。 9.0.2.0。
varchar
と入力されたpriceという名前の列を持つテーブルがあります。
そして問題があります。明らかに数値がある列があり(名前price
が関連すると仮定)、char型を選択しました。
この列の最大値が必要です。私はこのクエリを使用しています:
_SELECT MAX(price) FROM product_management.`item_list` ;
_
しかし、結果は間違っています。
結果は100%正しいですが、期待したとおりではありません。データベースはあなたが要求したとおりのことを行いましたが、あなたが求めていたものではありませんでした。
varchar
列のMAX()
を要求したところ、それが得られました。問題は、char列の場合、順序付けが行われることです辞書順-辞書のように-番号順ではありません。 char型の列には、数値ではなくchar値(文字列)があるためです。
したがって、データベースの場合、これらは単なる文字列です。そこに_peters-sellers
_の値を含めることができます。 char列の値の順序は、すべての値が視覚的に「数値」であっても、次のようになります。
_1
11
165
17
2
20
200
21
21789
3
35
350
9
99
997
_
そしてもちろん、クエリは辞書式の最大値(_997
_)を返し、数値の最大値(_21789
_)を返しません。
最善の解決策は、列を数値型に変換することです-integer
、decimal
、期待する値に応じて-そしてMAX()
とMIN()
および_ORDER BY
_は期待どおりに機能します。
タイプを変更できない場合(MAX/MIN関数を適用する前に値を数値タイプにキャストすること)は回避策がありますが、お勧めしません。これにより、列に意味のないデータを格納することが可能になり、変換エラーが発生する可能性があります(どの番号を_'peter-sellers'
_に変換する必要がありますか?)
Convert
関数を使用できます。詳細については、
https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_convert
例:
SELECT max(Convert(`price`, SIGNED)) FROM product_management.`item_list`;