MySQLでスコア列の合計を一意なIDの数で平均する方法
MySQLでスコア列の合計を一意なIDの数で割る方法
MySQLでは、DISTINCT句とCOUNT()関数を組み合わせることで、スコア列(Score)の合計値を重複のないIDの数で割り、平均値を求めることができます。この記事では、具体的な手順をサンプルコード付きで解説します。
1. テーブルの作成
まず、サンプル用のテーブルを作成します。ここでは「Id」と「Score」という2つの整数型カラムを持つテーブルを定義します。
mysql> create table DemoTable
-> (
-> Id int,
-> Score int
-> );
Query OK, 0 rows affected (0.95 sec)
2. レコードの挿入
次に、INSERT文を使用してテーブルにデータを登録します。同じIdに対して複数のスコアが存在するケースを想定しています。
mysql> insert into DemoTable values(10,90);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(10,190);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(11,230);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(11,130);
Query OK, 1 row affected (0.17 sec)
3. データの確認
SELECT文を実行して、テーブルに登録された全レコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+------+-------+
| Id | Score |
+------+-------+
| 10 | 90 |
| 10 | 190 |
| 11 | 230 |
| 11 | 130 |
+------+-------+
4 rows in set (0.00 sec)
4. 合計を一意なIDの数で平均するクエリ
ここが本題です。スコア列の合計値を、重複を除いたIDの件数で割るには、以下のようにSUM(Score) / COUNT(DISTINCT Id)という式を使用します。
今回のデータでは、一意なIDは「10」と「11」の2つです。そのため、スコアの合計640(90 + 190 + 230 + 130)を2で割ることになります。
mysql> SELECT SUM(Score) / COUNT(DISTINCT Id) from DemoTable;
実行結果は以下の通りです。
+---------------------------------+
| SUM(Score) / COUNT(DISTINCT Id) |
+---------------------------------+
| 320.0000 |
+---------------------------------+
1 row in set (0.00 sec)
まとめ
このように、COUNT(DISTINCT カラム名)を使えば、重複する値を除外した件数を簡単に取得できます。ユーザーごとの平均スコアなど、「全体の合計を人(ID)単位で割りたい」場面で非常に便利なテクニックなので、ぜひ活用してください。
-
MySQLでGROUP BYとGROUP_CONCATを使って各グループのレコード数とID一覧を1行で表示する方法
MySQLでは、GROUP_CONCAT()とCOUNT()、さらにGROUP BY句を組み合わせることで、同じ値を持つ複数のレコードを1行にまとめ、その件数と一緒に表示することができます。本記事では、実際にテーブルを作成し、データを挿入したうえで、グループごとのレコード数とIDの一覧を取得する手順を解説します。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> CompanyId int NOT
-
MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法
MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975 ( StudentNa