9월 04, 2023

SQL distinct 사용법 (멀티, 단일 칼럼의 중복값 제거하기)

만약 name, department, age라는 세 개의 칼럼을 가지고 있는 worker 테이블이 있다고 가정해보자. 그리고 해당 테이블에 아래와 같은 DB 정보가 존재한다고 가정해보자. 


만약 여기서


 select * from worker;  


이라고 하면 회사의 모든 직원이 출력될 것이다. (위 예시의 경우 총 6명) 


하지만 만약 회사의 동명이인을 제외한 unique 한 이름을 가진 사람이 몇 명 있는지 알고 싶다면 어떻게 하면 될까? 


바로 

 SELECT DISTINCT name FROM worker; 


이렇게 작성되면 될 것이다.


이렇게 하고 실행을 시켜보면 James, Kate, John 이렇게 세 명의 unique한 이름이 출력 될 것이다. 

하지만 만약 관리자가 팀 구분자까지 하여 unique한 이름을 알고 싶다고 하면 어떻게 하면 될까? 즉 A 팀과 B 팀에 동명이인이 있더라도 이것은 다른 한 쌍으로 간주하겠다는 것이다.


 SELECT DISTINCT name, department FROM worker;  


이런 식으로 작성하면 된다. 


즉, "DISTINCT"가 name과 department에 모두 걸려있다는 것이다. 


위 sql을 실행시켜보면 name과 department가 모두 중복되는 건은 Kate와 Management밖에 없으니 한 건의 중복만 삭제되어 총 5건이 출력 될 것이다. 

만약 중복이 제거된 workers의 개수를 알고 싶다면 distinct 위에 count를 씌울 수도 있다. 


 SELECT COUNT(DISTINCT(name)) FROM worker ; 


이렇게 하면 직접 우리가 결과 값을 count 하지 않고도 3이라는 숫자가 바로 출력되어 unique한 이름이 몇 개인지 알 수 있다.