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

MySQL COUNT()에서 중복 행 무시하기 – DISTINCT 활용법

COUNT에서 중복 행을 무시할 수 있나요?

네, 가능합니다. MySQL에서는 DISTINCT 키워드를 함께 사용하면 COUNT() 함수가 중복된 행을 무시하고 고유한 값의 개수만 집계하도록 만들 수 있습니다. 기본 문법은 다음과 같습니다.

select count(distinct yourColumnName) from yourTableName;

MySQL의 COUNT() 함수는 지정한 조건에 해당하는 행의 개수를 반환합니다. 여기에 DISTINCT를 결합하면 중복된 값을 제거한 후, 유니크한 값만 대상으로 개수를 계산하게 됩니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(10)
);
Query OK, 0 rows affected (0.47 sec)

2. 샘플 데이터 삽입

INSERT 명령으로 테이블에 레코드를 추가합니다. 중복 제거 효과를 확인할 수 있도록 John, Larry, Mike처럼 반복되는 이름을 의도적으로 포함했습니다.

mysql> insert into DemoTable(FirstName) values('Larry');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(FirstName) values('Sam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(FirstName) values('Larry');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.12 sec)

3. 저장된 데이터 확인

SELECT 명령으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 아래와 같은 결과를 출력합니다.

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Larry     |
|  2 | John      |
|  3 | Sam       |
|  4 | John      |
|  5 | John      |
|  6 | Larry     |
|  7 | Mike      |
|  8 | Robert    |
|  9 | Carol     |
| 10 | Mike      |
+----+-----------+
10 rows in set (0.00 sec)

총 10개의 행이 조회됩니다. 하지만 이름 기준으로 보면 John은 3번, Larry와 Mike는 각각 2번씩 나타나므로 중복 데이터가 존재합니다.

4. DISTINCT로 중복을 제외한 개수 구하기

이제 COUNT에서 중복 행을 무시하고 고유한 값의 개수만 구하는 쿼리를 실행해 보겠습니다.

mysql> select count(distinct FirstName) from DemoTable;

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

+---------------------------+
| count(distinct FirstName) |
+---------------------------+
|                         6 |
+---------------------------+
1 row in set (0.03 sec)

전체 10개의 행 중에서 고유한 이름은 Larry, John, Sam, Mike, Robert, Carol로 총 6개입니다. 이처럼 COUNT(DISTINCT 컬럼명) 형태를 사용하면 별도의 서브쿼리 없이도 중복을 제거한 개수를 간단하게 얻을 수 있습니다. 통계 조회나 리포트 작성 시 매우 유용하게 활용되는 패턴이니 꼭 기억해 두세요.