MySQL에서 특정 열(column)에 중복되지 않는 고유한 값이 몇 개 있는지 확인하고 싶다면 COUNT() 함수와 DISTINCT 키워드를 함께 사용하면 됩니다. COUNT() 함수의 인수로 DISTINCT와 열 이름을 전달하면, 해당 열에서 중복을 제거한 값의 개수가 반환됩니다.
기본 문법
SELECT COUNT(DISTINCT Col_name) FROM table_name;
예제
설명을 돕기 위해 다음과 같은 'tender' 테이블이 있다고 가정해 보겠습니다. 이 테이블에는 clientid 열에 중복된 값이 포함되어 있습니다.
mysql> Select * from tender; +----------+--------------+--------------+-------+ | clientid | client_Fname | Client_Lname | value | +----------+--------------+--------------+-------+ | 100 | Mohan | Kumar | 60000 | | 101 | Sohan | Singh | 50000 | | 101 | Somil | Rattan | 55000 | | 103 | Gaurav | Kumar | 75000 | | 103 | Rahul | Singh | 63000 | +----------+--------------+--------------+-------+ 5 rows in set (0.00 sec)
'clientid' 열의 고유한 값 개수 세기
위 테이블에는 총 5개의 행이 있지만, clientid 열의 실제 고유 값은 100, 101, 103으로 3개뿐입니다. 다음 쿼리를 실행하면 이를 손쉽게 확인할 수 있습니다.
mysql> Select COUNT(DISTINCT Clientid) from tender; +--------------------------+ | COUNT(DISTINCT Clientid) | +--------------------------+ | 3 | +--------------------------+ 1 row in set (0.00 sec)
결과에서 볼 수 있듯이, 중복된 101과 103은 각각 한 번만 계산되어 최종적으로 3이라는 값이 반환됩니다.
'Client_Lname' 열의 고유한 값 개수 세기
같은 방식으로 성(Last name)이 저장된 Client_Lname 열에도 적용할 수 있습니다. Kumar와 Singh은 각각 두 번씩 등장하지만, 고유한 성은 Kumar, Singh, Rattan으로 3개입니다.
mysql> Select COUNT(DISTINCT Client_Lname) from tender; +------------------------------+ | COUNT(DISTINCT Client_Lname) | +------------------------------+ | 3 | +------------------------------+ 1 row in set (0.00 sec)
참고 사항
COUNT(DISTINCT ...)를 사용할 때 한 가지 기억할 점은 NULL 값은 집계에서 제외된다는 것입니다. 즉, 해당 열에 NULL이 포함되어 있어도 고유 값 개수에는 포함되지 않으므로, NULL까지 세어야 하는 경우라면 별도의 처리가 필요합니다. 또한 대량의 데이터를 다룰 때는 DISTINCT 연산이 내부적으로 정렬 작업을 수행하므로, 필요하다면 인덱스를 활용해 성능을 최적화하는 것이 좋습니다.