MySQLで2つのテーブルの文字列を集計する方法|COUNT(*)とUNION ALLの使い方
MySQLでレコード数を数えるには COUNT(*) を使用します。さらに、UNION ALL を組み合わせることで、複数のテーブルにまたがる文字列値の合計カウントを取得できます。
この記事では、2つのテーブルに格納された文字列データを統合して、各文字列の出現回数を集計する手順を具体的な例とともに解説します。
1. 最初のテーブルを作成する
まず、CREATE TABLE文を使って最初のテーブルを作成します。
mysql> create table DemoTable1 ( Name varchar(20) ); Query OK, 0 rows affected (0.49 sec)
2. 最初のテーブルにレコードを挿入する
INSERT文を使って、文字列値を最初のテーブルに挿入します。
mysql> insert into DemoTable1 values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1 values('Robert');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1 values('Mike');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1 values('Robert');
Query OK, 1 row affected (0.10 sec)3. 最初のテーブルのレコードを確認する
SELECT文でテーブル内のすべてのレコードを表示します。
mysql> select *from DemoTable1;
実行結果は以下のとおりです。
+--------+ | Name | +--------+ | Chris | | Robert | | Mike | | Robert | +--------+ 4 rows in set (0.00 sec)
4. 2番目のテーブルを作成してレコードを挿入する
続いて、2番目のテーブルを作成します。
mysql> create table DemoTable2 ( Name varchar(40) ); Query OK, 0 rows affected (0.43 sec)
INSERT文で文字列値を挿入します。
mysql> insert into DemoTable2 values('Robert');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable2 values('Chris');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable2 values('Robert');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable2 values('David');
Query OK, 1 row affected (0.13 sec)5. 2番目のテーブルのレコードを確認する
SELECT文でテーブル内のすべてのレコードを表示します。
mysql> select *from DemoTable2;
実行結果は以下のとおりです。
+--------+ | Name | +--------+ | Robert | | Chris | | Robert | | David | +--------+ 4 rows in set (0.00 sec)
6. COUNT(*)とUNION ALLで合計カウントを取得する
COUNT(*)とUNION ALLを組み合わせることで、両方のテーブルに存在する文字列値の合計カウントを取得できます。サブクエリで2つのテーブルの結果を統合し、外側でGROUP BY句を使って名前ごとに集計します。
mysql> select tbl.Name,count(*) as Total_Count from ( select Name from DemoTable1 UNION ALL select Name from DemoTable2 )tbl group by tbl.Name;
実行結果は以下のとおりです。各文字列の合計カウントが新しい列「Total_Count」に表示されます。
+--------+-------------+ | Name | Total_Count | +--------+-------------+ | Chris | 2 | | Robert | 4 | | Mike | 1 | | David | 1 | +--------+-------------+ 4 rows in set (0.00 sec)
ポイントのまとめ
- UNION ALL は重複を排除せずに両テーブルのレコードを統合するため、カウント集計に適しています。
- 通常の UNION を使うと重複行が削除されてしまい、正しい合計カウントが得られないので注意が必要です。
- GROUP BY 句で名前ごとにグループ化し、COUNT(*) で各グループの件数を数えています。
このように、UNION ALLとGROUP BY、COUNT(*)を組み合わせることで、複数テーブルに分散したデータでも簡単に集計できます。ログデータの統計や在庫管理など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。
-
MySQLでテーブルを結合(JOIN)してデータベースから値を取得する方法
MySQLで複数のテーブルに分けて保存されているデータをまとめて取得したい場合は、JOIN(結合)を使用します。JOINとは、テーブル同士で共通となるキー(カラム)を基準に、複数のテーブルのレコードを関連付けて1つの結果セットとして取得できる仕組みです。本記事では、実際に2つのテーブルを作成し、JOINを使って値をフェッチする手順を具体的なSQL文とともに解説します。 1つ目のテーブル「demo52」を作成する まず、ユーザーのIDと名前を管理するテーブル「demo52」を作成します。「id」にはPRIMARY KEY(主キー)を設定します。 mysql> CREATE TABLE `
-
MySQLで文字列を暗号化・復号化する方法|AES_ENCRYPT()とAES_DECRYPT()の使い方
MySQLでは、組み込み関数であるAES_ENCRYPT()とAES_DECRYPT()を使うことで、文字列を手軽に暗号化・復号化できます。この記事では、実際のSQL文と実行例を交えながら、その基本的な使い方を解説します。暗号化・復号化の基本構文データを挿入する際にAES_ENCRYPT()で暗号化し、取得する際にAES_DECRYPT()で復号化するのが基本の流れです。INSERT INTO テーブル名 VALUES(AES_ENCRYPT(値, 秘密鍵));SELECT CAST(AES_DECRYPT(カラム名, 秘密鍵) AS CHAR) FROM テーブル名;暗号化されたデータはバイ