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

MySQL에서 열의 고유한 행 개수만 구하는 방법

MySQL에서 COUNT(DISTINCT)로 고유한 행 개수 구하기

MySQL에서 COUNT() 함수는 테이블의 행(row) 개수를 반환합니다. 여기에 DISTINCT 키워드를 함께 사용하면 중복된 값을 제외하고 오직 고유한(unique) 값의 개수만 계산할 수 있습니다.

예를 들어 이름 목록에서 'John'이 3번 반복되더라도 실제 고유한 이름은 몇 개인지 확인할 때 유용합니다. 아래 예제를 통해 단계별로 살펴보겠습니다.

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 명령을 사용해 중복 값을 포함한 레코드를 입력합니다.

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. 고유한 값만 카운트하기

COUNT 함수 안에 DISTINCT를 적용하면 중복 행을 무시하고 고유한 값의 개수만 집계할 수 있습니다.

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(*): 중복을 포함한 전체 행의 개수를 반환합니다.
  • COUNT(DISTINCT 컬럼명): 해당 컬럼에서 중복을 제거한 고유한 값의 개수만 반환합니다.

이처럼 COUNT(DISTINCT) 조합을 활용하면 회원 통계, 태그 개수 집계 등 중복 없는 데이터 분석이 필요한 상황에서 손쉽게 원하는 결과를 얻을 수 있습니다.