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

MySQL에서 COUNT(*)로 여러 행 대신 단일 행을 반환하는 방법

중복된 여러 값을 하나의 결과로 집계하여 개수를 확인하려면 GROUP BY 절과 COUNT(*) 함수를 함께 사용해야 합니다. GROUP BY는 동일한 값들을 하나의 그룹으로 묶어주고, COUNT(*)는 그 그룹의 개수를 반환합니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable (Value int);
Query OK, 0 rows affected (0.55 sec)

2. 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 샘플 레코드를 삽입합니다. 일부러 같은 값(10, 20 등)을 여러 번 넣어 중복 데이터를 만들었습니다.

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values(60);
Query OK, 1 row affected (0.25 sec)

3. 저장된 데이터 확인하기

SELECT 명령으로 테이블에 저장된 전체 레코드를 조회합니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------+
| Value |
+-------+
|    10 |
|    20 |
|    10 |
|    30 |
|    10 |
|    20 |
|    40 |
|    10 |
|    20 |
|    20 |
|    60 |
+-------+
11 rows in set (0.00 sec)

4. 고유 값의 개수 구하기

이제 서브쿼리와 GROUP BY를 활용하여 고유한 값(10, 20, 30, 40, 60)이 몇 종류인지 세어 보겠습니다. 내부 쿼리가 Value 기준으로 그룹화된 결과를 만들고, 외부 쿼리의 COUNT(*)가 그 그룹의 수를 반환합니다.

mysql> SELECT COUNT(*) FROM (SELECT *FROM DemoTable GROUP BY Value) AS tbl;

실행 결과는 다음과 같습니다.

+----------+
| COUNT(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

결과를 보면 11개의 행이 있었지만, 중복을 제거한 고유 값은 총 5개(10, 20, 30, 40, 60)임을 알 수 있습니다. 이처럼 서브쿼리 안에서 GROUP BY로 중복을 제거한 뒤, 바깥쪽에서 COUNT(*)를 적용하면 여러 행이 아닌 단일 행의 집계 결과를 얻을 수 있습니다.