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

MySQL에서 여러 COUNT 쿼리의 결과를 합산하는 방법

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 절을 각 서브쿼리에 추가하여 특정 조건에 맞는 레코드만 집계하는 것도 가능합니다.