MySQLで特定のIDに基づいて2つの異なるテーブルの類似カラム値を合計する方法
はじめに
2つのテーブルがあり、どちらも「PlayerId」と「PlayerScore」という2つのカラムを持っている状況を考えてみましょう。このとき、特定のPlayerIdに対して、両テーブルのPlayerScoreを合計したいケースはよくあります。
こうした場合には、UNIONを活用することで実現できます。この記事では、具体的な手順をサンプルコードとともに解説します。
1つ目のテーブルを作成する
まず、以下のクエリでテーブルを作成します。
mysql> create table DemoTable1(PlayerId int,PlayerScore int);
Query OK, 0 rows affected (9.84 sec)
次に、INSERT文を使ってレコードを挿入します。
mysql> insert into DemoTable1 values(1000,87);
Query OK, 1 row affected (3.12 sec)
mysql> insert into DemoTable1 values(1000,65);
Query OK, 1 row affected (1.29 sec)
mysql> insert into DemoTable1 values(1001,10);
Query OK, 1 row affected (1.76 sec)
mysql> insert into DemoTable1 values(1000,45);
Query OK, 1 row affected (2.23 sec)
SELECT文でテーブル内の全レコードを表示してみましょう。
mysql> select *from DemoTable1;
実行結果は以下の通りです。
+----------+-------------+
| PlayerId | PlayerScore |
+----------+-------------+
| 1000 | 87 |
| 1000 | 65 |
| 1001 | 10 |
| 1000 | 45 |
+----------+-------------+
4 rows in set (0.00 sec)
2つ目のテーブルを作成する
続いて、2つ目のテーブルを作成します。
mysql> create table DemoTable2(PlayerId int,PlayerScore int);
Query OK, 0 rows affected (11.76 sec)
同様にINSERT文でレコードを挿入します。
mysql> insert into DemoTable2 values(1000,67);
Query OK, 1 row affected (0.71 sec)
mysql> insert into DemoTable2 values(1001,58);
Query OK, 1 row affected (1.08 sec)
mysql> insert into DemoTable2 values(1000,32);
Query OK, 1 row affected (0.19 sec)
SELECT文で全レコードを確認します。
mysql> select *from DemoTable2;
実行結果は以下の通りです。
+----------+-------------+
| PlayerId | PlayerScore |
+----------+-------------+
| 1000 | 67 |
| 1001 | 58 |
| 1000 | 32 |
+----------+-------------+
3 rows in set (0.00 sec)
UNIONを使って2つのテーブルの合計値を求める
それでは、片方のテーブルのカラムともう片方のテーブルのカラムを合計するクエリを見ていきましょう。ここでは、PlayerIdが「1000」のPlayerScoreを合計します。
mysql> select sum(firstSum) from
(select Sum(PlayerScore) firstSum from DemoTable1 where PlayerId=1000 union
select Sum(PlayerScore) firstSum from DemoTable2 where PlayerId=1000) tbl;
実行結果は以下の通りです。
+---------------+
| sum(firstSum) |
+---------------+
| 296 |
+---------------+
1 row in set (0.02 sec)
クエリの仕組み
このクエリでは、まず各テーブルに対してWHERE句で「PlayerId=1000」のレコードに絞り込み、それぞれのPlayerScoreの合計(DemoTable1:197、DemoTable2:99)を算出しています。その後、UNIONによって両方の合計値を統合し、外側のSUM関数で最終的な合計値「296」を取得しています。
なお、UNIONを使用する場合、各SELECT文の出力カラム名とデータ型が一致している必要がある点に注意してください。また、重複行を除外したくない場合は「UNION ALL」を使うことも可能です。
-
「UP」という同じ名前の列を持つ5つのテーブルの合計を計算するMySQLクエリ
解決方法の概要 「UP」という同じ名前の列を持つ複数のテーブルから合計値を計算するには、UNION ALLとSUM()関数を組み合わせて使用します。各テーブルごとにSUM()で合計を求め、UNION ALLでその結果を縦に連結し、最後に外側のSUM()によって全体の合計値を取得します。 サンプルテーブルの作成 まず、動作確認用に5つのテーブルを作成します。1つ目のテーブルは以下のように作成し、データを挿入します。 mysql> create table DemoTable1977 ( UP int ); Query OK, 0 rows affected (0.0
-
MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法
MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975 ( StudentNa