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

MySQLのENUM型(列挙型)の値を式で使う方法とインデックス番号の仕組み

MySQLのENUM型(列挙型)の値は、内部的にインデックス番号と関連付けられています。そのため、ENUM型の値を式の中で使用すると、計算は文字列そのものではなく、対応するインデックス番号に対して行われます。

ENUM値とインデックス番号の関係

ENUM型では、定義時に列挙した値に先頭から1、2、3…というインデックス番号が割り当てられます。空文字列('')は0、NULLはNULLとして扱われる点に注意が必要です。

以下の例では、Gradeカラムが ENUM('POOR','GOOD') として定義されているテーブルを使用します。この場合、「POOR」はインデックス1、「GOOD」はインデックス2に対応します。

mysql> Select * from Result;
+-----+--------+-------+
| Id  | Name   | Grade |
+-----+--------+-------+
| 100 | Gaurav | GOOD  |
| 101 | Rahul  | POOR  |
| 102 | Rahul  | NULL  |
| 103 | Mohan  |       |
+-----+--------+-------+
4 rows in set (0.00 sec)

集計関数でのENUM値の計算例

SUM関数やAVG関数を使うと、ENUM値はインデックス番号に変換されて計算されます。

mysql> Select SUM(Grade) from result;
+------------+
| SUM(Grade) |
+------------+
|          3 |
+------------+
1 row in set (0.00 sec)

mysql> Select AVG(Grade) from result;
+------------+
| AVG(Grade) |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)

SUM(Grade) の結果が3になっているのは、「GOOD」のインデックス2と「POOR」のインデックス1を合計したためです。また、AVG(Grade) は (2+1)÷2 = 1.5 となりますが、結果が整数で表示されるため1と出力されています。

算術演算でのENUM値の計算例

カラムに0を加算したり1を減算したりすると、各ENUM値に対応するインデックス番号がそのまま返されます。

mysql> Select Grade+0 from result;
+---------+
| Grade+0 |
+---------+
|       2 |
|       1 |
|    NULL |
|       0 |
+---------+
4 rows in set (0.00 sec)

mysql> Select Grade-1 from result;
+---------+
| Grade-1 |
+---------+
|       1 |
|       0 |
|    NULL |
|      -1 |
+---------+
4 rows in set (0.00 sec)

この結果から、以下の対応関係が確認できます。

  • 「GOOD」→ インデックス番号 2
  • 「POOR」→ インデックス番号 1
  • NULL → NULL(計算結果もNULLになる)
  • 空文字列('')→ インデックス番号 0

このように、MySQLではENUM型の値を式に組み込むと、文字列としてではなくインデックス番号として計算が行われます。ENUM値を数値演算に使う場合は、この仕組みを理解しておくことが重要です。

  1. MySQLでNULL値を0に置き換える方法:IFNULL関数の使い方を解説

    MySQLでクエリを実行した際にNULL値が返ってくる場合、IFNULL()関数を使うことで、NULLを別の値(ここでは0)に置き換えることができます。この記事では、実際にテーブルを作成し、NULL値を含むデータに対してIFNULL()を適用する手順を順番に解説します。サンプルテーブルの作成まず、テスト用のテーブルを作成します。Idカラムは自動採番の主キーとし、ValueカラムにはNULLを許容するように定義します。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMAR

  2. MySQLでAUTO_INCREMENTの値を1から再スタートさせる方法

    MySQLでAUTO_INCREMENT(自動採番)の値を1から振り直したい場合は、TRUNCATEでテーブルを初期化するのが最も簡単な方法です。ここでは、実際にサンプルテーブルを作成し、動作を順番に確認していきましょう。サンプルテーブルの作成まず、AUTO_INCREMENT列を持つテーブルを作成します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY ); Query OK, 0 rows affected (1.44 sec)次に、INSERTコマンドで複数のレ