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

【MySQL】複数のテーブルからCOUNT(*)でレコード数を取得して合計する方法

複数のテーブルそれぞれのレコード数(COUNT(*))を取得し、その合計を求めたい場合は、UNION ALLを使用します。各テーブルのCOUNT(*)の結果をサブクエリとして縦に結合し、外側でSUM関数によって合計するのがポイントです。

基本構文

select sum(variableName.aliasName)
from
    (
    select count(*) as yourAliasName from yourTableName1
    UNION ALL
    select count(*) as yourAliasName from yourTableName2
    ) yourVariableName;

サンプルデータベースで実装してみよう

それでは、上記の構文を実際に実装してみましょう。ここでは、複数のテーブルを含むサンプルデータベースを使用します。今回使うのは次の2つのテーブルです。

  • userdemo
  • wheredemo

テーブル「userdemo」の全レコードを表示

まず、「userdemo」テーブルの全レコードを表示するクエリです。

mysql> select *from userdemo;

出力結果は以下の通りです。

+--------+----------+------------------+
| UserId | UserName | RegisteredCourse |
+--------+----------+------------------+
| 1      | John     | Java             |
| 2      | Larry    | C                |
| 3      | Carol    | C++              |
| 4      | Mike     | C#               |
+--------+----------+------------------+
4 rows in set (0.08 sec)

テーブル「wheredemo」の全レコードを表示

続いて、「wheredemo」テーブルの全レコードを表示するクエリです。

mysql> select *from wheredemo;

出力結果は以下の通りです。

+------+---------+
| Id   | Name    |
+------+---------+
| 101  | Maxwell |
| 110  | David   |
| 1000 | Carol   |
| 1100 | Bob     |
| 115  | Sam     |
+------+---------+
5 rows in set (0.20 sec)

両方のテーブルのCOUNT(*)を合計するクエリ

上記2つのテーブルに対してCOUNT(*)を実行し、その合計を求めるクエリがこちらです。

mysql> select sum(tbl.EachTableCount)
    -> from
    -> (
    -> select count(*) as EachTableCount from userdemo
    -> UNION ALL
    -> select count(*) as EachTableCount from wheredemo
    -> )tbl;

出力結果は以下の通りです。

+-------------------------+
| sum(tbl.EachTableCount) |
+-------------------------+
| 9                       |
+-------------------------+
1 row in set (0.00 sec)

このように、UNION ALLで各テーブルの件数を結合したサブクエリを作成し、SUM関数で合計することで、複数テーブルの総レコード数を1つのクエリで簡単に取得できます。テーブルが3つ以上の場合も、同様にUNION ALLのブロックを追加していくだけで対応可能です。

  1. 複数テーブルのデータを組み合わせてMySQLビューを作成する方法(UNION演算子の活用)

    MySQLでは、UNION演算子を使うことで、2つ以上のSELECT文の結果セットを1つに結合できます。この特性を利用すれば、複数のテーブルから取得したデータをまとめたビュー(VIEW)を簡単に作成できます。ここでは、以下のような2つの基本テーブル「Student_info」と「Student_detail」を例に説明します。サンプルテーブル:Student_infomysql> Select * from Student_info; +------+---------+------------+------------+ | id | Name | Address |

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected