MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL】VARCHAR型の列から最小値・最大値を取得し、別々の列として表示する方法

MySQLでは、VARCHAR型の列に数値が文字列として保存されている場合、そのままMIN()やMAX()関数を使うと文字列として比較されてしまい、期待した結果が得られないことがあります。そこで、CAST()関数を使って値を数値型(SIGNED)に変換することで、正しく最小値と最大値を取得できます。この記事では、その具体的な手順を解説します。

テーブルの作成

まず、サンプルとなるテーブルを作成します。

mysql> create table DemoTable
(
    Value varchar(100)
);
Query OK, 0 rows affected (0.75 sec)

レコードの挿入

次に、INSERTコマンドを使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable values('190');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('230');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('120');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('189');
Query OK, 1 row affected (0.19 sec)

登録データの確認

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

上記のクエリを実行すると、次のような出力が得られます。

+-------+
| Value |
+-------+
|   190 |
|   230 |
|   120 |
|   189 |
+-------+
4 rows in set (0.00 sec)

VARCHAR列から最小値と最大値を別々の列として取得するクエリ

以下が、CAST()関数を使用してVARCHAR列の値をSIGNED(符号付き整数)に変換し、MIN()とMAX()で最小値と最大値を求めて、「Min」「Max」という別々の列として表示するクエリです。

mysql> select min(cast(Value AS SIGNED)) AS Min,
max(cast(Value AS SIGNED)) AS Max
from DemoTable;

このクエリを実行すると、次のような出力が得られます。

+------+------+
| Min  | Max  |
+------+------+
|  120 | 230  |
+------+------+
1 row in set (0.03 sec)

このように、MIN()関数とMAX()関数の中でCAST(Value AS SIGNED)を使うことで、文字列として保存された数値を正しく数値比較でき、最小値「120」と最大値「230」をそれぞれ別々の列として取得することができます。VARCHAR型の列に数値データを保存している場合は、このテクニックを活用してみてください。

  1. MySQLのVARCHAR型カラムから最大値を正しく取得する方法

    VARCHAR型(文字列型)のカラムに対してそのまま MAX() 関数を使用すると、値は文字列として比較されるため、「8」「901」「10001」のような数値的な大小関係が正しく評価されません。そこで、CAST() を使って値を数値型に変換してから MAX() を適用することで、正確な最大値を取得できます。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable2030 -> ( -> Value varchar(20) -> ); Query OK, 0 row

  2. MySQLで列から最大値を取得する方法

    MySQLで列の最大値を取得するには?MySQLのテーブルから特定の列の最大値を取得するには、ORDER BY句とLIMIT句を組み合わせる方法が便利です。ここでは、実際にテーブルを作成し、データを挿入して、最大値を取得する手順を順番に解説します。1. テーブルを作成するまず、以下のコマンドでサンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> Value int -> ); Query OK, 0 rows affected (0.63 sec)2. レコードを挿入する次に、INSERTコ