MySQLのSUM()関数は、引数に文字データ型の列が渡された場合にどのように評価されるか
MySQLのSUM()関数における文字型列の扱い
MySQLのSUM()関数は、本来数値を集計するための関数です。しかし、引数として文字データ型(CHAR型やVARCHAR型など)の列を指定した場合でもエラーにはならず、NULLではなく「0」を返し、同時に警告(warning)を出力します。
これは、SUM()関数が集計処理の際に文字列を数値へ変換しようとするためです。文字列は数値として解釈できない場合、0として扱われるというMySQLの仕様によるものです。以下の例では、「Social」というテーブルのデータを使って、この挙動を確認できます。
実行例
mysql> Select * from Social; +------+-------+ | Id | Name | +------+-------+ | 100 | Rahul | +------+-------+ 1 row in set (0.00 sec) mysql> Select SUM(Name) From Social; +-----------+ | SUM(Name) | +-----------+ | 0 | +-----------+ 1 row in set, 1 warning (0.00 sec)
結果の解説
上記の出力結果を見ると、SUM(Name)の結果が0になっていることがわかります。「Rahul」という文字列は数値に変換できず、集計時には0として評価されたためです。
また、出力の最後に「1 warning」と表示されていることから、警告も発生していることが確認できます。この警告の詳細を知りたい場合は、直後に以下のコマンドを実行することで確認可能です。
mysql> SHOW WARNINGS;
まとめ
- SUM()関数に文字型の列を渡すと、NULLではなく0が返る。
- 同時に警告(warning)が発行され、「SHOW WARNINGS」で内容を確認できる。
- 文字列は数値変換時に0として評価されるため、意図しない結果になる可能性がある。
SUM()関数を使用する際は、対象となる列が数値型であることを事前に確認しておくことで、このような予期しない挙動を防ぐことができます。
-
MySQLで列の値を合計する方法|SUM関数の使い方を解説
MySQLである列の値の合計を求めたい場合は、集計関数 SUM() を使用します。SUM関数は、指定したカラム(列)に格納されている数値をすべて加算し、その合計値を1つの結果として返してくれる便利な関数です。ここでは、実際にサンプルテーブルを作成し、SUM関数で列の合計値を取得する手順を順番に見ていきましょう。1. サンプルテーブルの作成まずは、CREATE TABLE文でテスト用のテーブルを作成します。 ); Query OK, 0 rows affected (0.71 sec)この例では、自動採番される主キー「Id」と、金額を格納する整数型のカラム「€」を持つテーブルを作成しています。2
-
MySQLで列エイリアスを特定のデータ型として扱う方法(CASTとCASEの活用)
MySQLでは、符号なし整数型(UNSIGNED)の列をそのままSELECTすると、負の値を扱えないという制約があります。そこで、CASEステートメントとCAST関数を組み合わせることで、列エイリアスの結果を特定のデータ型(ここではSIGNED=符号付き整数)に強制的に変換する方法を紹介します。1. サンプルテーブルの作成まず、テスト用のテーブルを作成します。「Value」列はUNSIGNED型、「Status」列はTINYINT(1)型とします。mysql> create table DemoTable1505 -> ( &