MySQLで複数のCOUNTクエリの結果を合計する方法
MySQLでは、複数のテーブルに対するCOUNTクエリの結果を1つの数値として合計できます。ポイントは、サブクエリを「+」(プラス)演算子で連結することです。それぞれのサブクエリが返す件数を足し合わせることで、全体の合計レコード数を簡単に取得できます。
基本構文
複数のCOUNTクエリの結果を合計するには、以下の構文を使用します。
SELECT (SELECT COUNT(*) FROM テーブル名1)
+ (SELECT COUNT(*) FROM テーブル名2)
+ (SELECT COUNT(*) FROM テーブル名3)
.
.
.
N AS 任意の別名;
検証に使用する3つのテーブル
ここでは、テストデータベース内にある次の3つのテーブルを使用して動作を確認します。
- users
- sortingstringdemo
- userlogintable
まずは、SELECT文で各テーブルのレコード内容を確認しておきましょう。以下の3つのサンプルテーブルには、あらかじめレコードが登録されています。
1つ目のテーブル:users
mysql> select *from users;
実行結果は以下のとおりです。
+----+----------+---------------------+
| Id | UserName | UserLastseen |
+----+----------+---------------------+
| 1 | Larry | 2019-01-15 02:45:00 |
| 2 | Sam | 2019-01-15 15:01:52 |
| 3 | Mike | 2019-01-15 02:30:00 |
| 4 | Bob | 2019-01-15 15:02:00 |
| 5 | David | 2019-01-15 14:55:00 |
+----+----------+---------------------+
5 rows in set (0.08 sec)
このテーブルには5件のレコードが存在します。
2つ目のテーブル:sortingstringdemo
mysql> select *from sortingstringdemo;
実行結果は以下のとおりです。
+--------+
| Amount |
+--------+
| 12.34 |
| 124.50 |
| 9.59 |
| 150.68 |
| 600.54 |
+--------+
5 rows in set (0.06 sec)
こちらも5件のレコードが格納されています。
3つ目のテーブル:userlogintable
mysql> select *from userlogintable;
実行結果は以下のとおりです。
+----+--------+---------------------+
| Id | UserId | UserLoginDateTime |
+----+--------+---------------------+
| 1 | 2 | 2019-01-27 13:47:20 |
| 3 | 2 | 2019-01-26 11:30:30 |
| 4 | 1 | 2015-03-11 15:23:55 |
+----+--------+---------------------+
3 rows in set (0.18 sec)
このテーブルには3件のレコードが存在します。
COUNT結果を合計するクエリを実行する
それでは、前述の構文を実際に適用して、複数のCOUNTクエリの結果を合計してみましょう。以下のクエリでは、先ほど確認した3つのテーブル名を指定しています。
mysql> select (select count(*) from users)
-> +(select count(*) from sortingstringdemo)
-> +(select count(*) from userlogintable) as TotalRecords;
実行すると、3つのテーブルすべてのレコード総数が表示されます。
+--------------+
| TotalRecords |
+--------------+
| 13 |
+--------------+
1 row in set (0.00 sec)
実行結果の解説
結果として「13」という値が返されました。これは、usersテーブルの5件+sortingstringdemoテーブルの5件+userlogintableテーブルの3件を合計した数です。
このように、各サブクエリが個別のカウント値を返し、「+」演算子によってそれらが順番に加算される仕組みになっています。AS句で付けた別名(ここではTotalRecords)が、結果セットのカラム名として表示されます。
まとめ
複数テーブルの合計レコード数を取得したい場合は、UNIONなどでデータを結合しなくても、サブクエリを「+」で連結するだけで手軽に実現できます。テーブルの数が多くても同じ要領で追加していくだけで対応可能なので、ダッシュボードや集計レポートを作成する際にぜひ活用してください。
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected
-
MySQLで複数のテーブルの行数(COUNT(*))を1つのクエリで取得する方法
MySQLでは、サブクエリを組み合わせることで、複数のテーブルの行数を1つのクエリで同時に取得できます。基本となる構文は以下の通りです。SELECT (SELECT COUNT(*) FROM テーブル名1) AS エイリアス名1, (SELECT COUNT(*) FROM テーブル名2) AS エイリアス名2 FROM dual;構文のポイント各テーブルに対して COUNT(*) を含むスカラーサブクエリを作成し、それらを SELECT 句の中に並べます。MySQLでは FROM dual を指定することで、実際のテーブルを参照しないままサブクエリを評価できます(なお、My