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

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()関数を使用する際は、対象となる列が数値型であることを事前に確認しておくことで、このような予期しない挙動を防ぐことができます。

  1. MySQLで列の値を合計する方法|SUM関数の使い方を解説

    MySQLである列の値の合計を求めたい場合は、集計関数 SUM() を使用します。SUM関数は、指定したカラム(列)に格納されている数値をすべて加算し、その合計値を1つの結果として返してくれる便利な関数です。ここでは、実際にサンプルテーブルを作成し、SUM関数で列の合計値を取得する手順を順番に見ていきましょう。1. サンプルテーブルの作成まずは、CREATE TABLE文でテスト用のテーブルを作成します。 ); Query OK, 0 rows affected (0.71 sec)この例では、自動採番される主キー「Id」と、金額を格納する整数型のカラム「€」を持つテーブルを作成しています。2

  2. MySQLで列エイリアスを特定のデータ型として扱う方法(CASTとCASEの活用)

    MySQLでは、符号なし整数型(UNSIGNED)の列をそのままSELECTすると、負の値を扱えないという制約があります。そこで、CASEステートメントとCAST関数を組み合わせることで、列エイリアスの結果を特定のデータ型(ここではSIGNED=符号付き整数)に強制的に変換する方法を紹介します。1. サンプルテーブルの作成まず、テスト用のテーブルを作成します。「Value」列はUNSIGNED型、「Status」列はTINYINT(1)型とします。mysql> create table DemoTable1505    -> ( &