MySQL에서 여러 테이블의 레코드 수를 한 번에 확인하고 싶을 때가 있습니다. 이럴 때 각 테이블에 대해 개별적으로 COUNT 쿼리를 실행할 필요 없이, 서브쿼리를 활용해 여러 COUNT 쿼리의 결과를 하나로 합산할 수 있습니다.
기본 문법
여러 COUNT 쿼리의 결과를 더하려면 아래와 같은 문법을 사용합니다.
SELECT (SELECT COUNT(*) FROM yourTableName1) + (SELECT COUNT(*) FROM yourTableName2) + (SELECT COUNT(*) FROM yourTableName3) . . . N AS anyAliasName;
각 서브쿼리가 반환한 COUNT 값을 + 연산자로 연결하면, 모든 테이블의 레코드 수 합계를 하나의 컬럼으로 얻을 수 있습니다.
예제 데이터 준비
이번 예제에서는 test 데이터베이스에 있는 세 개의 테이블을 사용합니다.
- users
- sortingstringdemo
- userlogintable
먼저 SELECT 문으로 각 테이블의 레코드를 확인해 보겠습니다.
첫 번째 테이블: 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)
users 테이블에는 총 5개의 레코드가 있습니다.
두 번째 테이블: sortingstringdemo
mysql> select *from sortingstringdemo;
실행 결과는 다음과 같습니다.
+--------+ | Amount | +--------+ | 12.34 | | 124.50 | | 9.59 | | 150.68 | | 600.54 | +--------+ 5 rows in set (0.06 sec)
sortingstringdemo 테이블 역시 5개의 레코드를 가지고 있습니다.
세 번째 테이블: 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)
userlogintable 테이블에는 3개의 레코드가 있습니다.
COUNT 쿼리 결과 합산하기
이제 앞서 소개한 문법을 실제로 적용하여 세 테이블의 COUNT 결과를 합산해 보겠습니다.
mysql> select (select count(*) from users) -> +(select count(*) from sortingstringdemo) -> +(select count(*) from userlogintable) as TotalRecords;
실행 결과, 세 테이블의 전체 레코드 수가 하나의 값으로 출력됩니다.
+--------------+ | TotalRecords | +--------------+ | 13 | +--------------+ 1 row in set (0.00 sec)
결과 확인
출력된 값 13은 각 테이블의 레코드 수(5 + 5 + 3)를 모두 더한 합계입니다. 이처럼 서브쿼리와 산술 연산자를 조합하면 별도의 UNION이나 임시 테이블 없이도 여러 테이블의 레코드 수를 손쉽게 집계할 수 있습니다.
참고로, 동일한 조건의 COUNT를 여러 테이블에 적용해야 하는 경우가 많다면 WHERE 절을 각 서브쿼리에 추가하여 특정 조건에 맞는 레코드만 집계하는 것도 가능합니다.