Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 여러 테이블의 COUNT(*) 결과를 하나로 합산하는 방법

UNION ALL로 여러 테이블의 레코드 수 합산하기

MySQL에서 두 개 이상의 테이블에 저장된 전체 레코드 수를 한 번의 쿼리로 구하고 싶다면 UNION ALL을 활용하면 됩니다. 각 테이블에서 count(*)를 조회한 뒤, 서브쿼리 결과를 sum()으로 묶어 합산하는 방식입니다.

기본 문법

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

이제 실제 예제를 통해 위 문법을 살펴보겠습니다. 여러 개의 테이블을 포함한 샘플 데이터베이스를 사용하며, 이번 예제에서는 다음 두 테이블을 사용합니다.

  • userdemo
  • wheredemo

예제 테이블 확인하기

먼저 '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' 테이블의 레코드를 조회하는 쿼리입니다.

mysql> select *from wheredemo;

실행 결과는 아래와 같습니다.

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

두 테이블의 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)

'userdemo' 테이블에는 4개, 'wheredemo' 테이블에는 5개의 레코드가 있으므로 최종 결과로 9가 반환됩니다. 이처럼 UNION ALL과 sum()을 조합하면 테이블이 몇 개든 전체 레코드 수를 손쉽게 집계할 수 있습니다.