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

MySQLのSUM()関数を使って列の重複しない値だけの合計を計算する方法

MySQLのSUM()関数とDISTINCTキーワードの組み合わせ

MySQLでは、列に含まれる重複しない値(異なる値)のみの合計を計算したい場合、SUM()関数の中で「DISTINCT」キーワードを列名と一緒に使用します。通常のSUM()関数はすべての行の値を合計しますが、DISTINCTを指定することで、同じ値は1回だけカウントされるようになります。

サンプルテーブルの確認

ここでは、以下のようなレコードを持つ「employee_tbl」テーブルを例に考えてみましょう。

mysql> SELECT * FROM employee_tbl;
+------+------+------------+--------------------+
| id   | name | work_date  | daily_typing_pages |
+------+------+------------+--------------------+
| 1    | John | 2007-01-24 | 250                |
| 2    | Ram  | 2007-05-27 | 220                |
| 3    | Jack | 2007-05-06 | 170                |
| 3    | Jack | 2007-04-06 | 100                |
| 4    | Jill | 2007-04-06 | 220                |
| 5    | Zara | 2007-06-06 | 300                |
| 5    | Zara | 2007-02-06 | 350                |
+------+------+------------+--------------------+
7 rows in set (0.00 sec)

DISTINCTを使った合計の計算方法

上記のテーブルをもとに、daily_typing_pages列の重複しない値だけを合計したい場合は、次のようにクエリを実行します。

mysql> SELECT SUM(DISTINCT daily_typing_pages)
    -> FROM employee_tbl;
+-------------------------+
| SUM(daily_typing_pages) |
+-------------------------+
|                    1390 |
+-------------------------+
1 row in set (0.00 sec)

結果の解説

この結果セットを見ると、DISTINCTキーワード付きのMySQL SUM()関数は、重複していないレコードのみを合計していることがわかります。具体的には、テーブル内に「220」という値が2回出現しています(RamとJillのレコード)が、DISTINCTを指定したことで「220」は1回だけ加算されています。

参考までに、DISTINCTなしで単純に合計すると「1610(250 + 220 + 170 + 100 + 220 + 300 + 350)」となりますが、DISTINCTを使用した場合は「1390(250 + 220 + 170 + 100 + 300 + 350)」という結果になります。このように、SUM(DISTINCT 列名)を使うことで、ユニークな値のみの合計を簡単に求めることができます。

  1. MySQLで特定の3つの値しか格納できないカラムを持つテーブルを作成する方法

    MySQLで、あらかじめ決められた3つの値だけを格納できるカラムを持つテーブルを作成したい場合は、ENUMデータ型を使用します。ENUM型を使うと、指定した候補値以外のデータが挿入されるのを防ぐことができます。テーブルの作成まず、ENUM型のカラムを持つテーブルを作成しましょう。ここでは例として、「RED」「GREEN」「BLUE」の3色のみを許可するColorカラムを定義します。mysql> create table DemoTable838(Color ENUM(RED,GREEN,BLUE)); Query OK, 0 rows affected (0.67 sec)これで、Col

  2. MySQLのWHERE句でSUM()関数の結果は使用できる?HAVING句を使った正しい書き方を解説

    MySQLでは、SUM()などの集計関数の結果をWHERE句で直接使用することはできません。これは、WHERE句がグループ化の前に行単位で評価されるためです。代わりに、GROUP BYと組み合わせたHAVING句を使うことで、集計結果に基づいた絞り込みが可能になります。 ここからは、実際にサンプルテーブルを作成しながら手順を確認していきましょう。 1. サンプルテーブルの作成 まず、名前と価格を持つテーブルを作成します。 mysql> create table DemoTable ( Name varchar(50), Price int ); Query OK, 0