본문 바로가기
MS SQL

MS SQL 중복 제거하기, 중복 데이터 조회하는 방법

by 디디찐 2023. 12. 14.
반응형

MS SQL 중복 데이터 제거하는 방법과 조회하는 방법에 대해 알아보겠습니다. 데이터 베이스에 저장된 항목 중 중복된 값이 여러 행으로 있는 경우가 있습니다. 중복된 값을 확인하고 제거하기 위해 쿼리문을 어떻게 작성해야 하는지 알려드리겠습니다.

 

 

 

 

 

※샘플 테이블

SEQ_NO ITEM_CODE QTY
1 APPLE 100
2 APPLE 150
3 APPLE 200
4 BANANA 10
5 BANANA 25
6 CHERRY 10

 

1. 중복 데이터 없이 조회하는 방법

우선, 중복된 데이터 없이 고유한 데이터만 보고 싶을 때 GROUP BY 혹은 DISTINCT를 통해 중복 없는 데이터를 확인할 수 있습니다. 위의 샘플 테이블에 ITEM_CODE 필드값들 중 중복된 데이터들이 있는데 아래의 쿼리문을 사용하면 중복된 데이터 없이 ITEM_CODE 필드의 데이터들을 확인할 수 있습니다.

 

 

GROUP BY와 DISTINCT는 기능적인 차이는 조금 있지만, 동일한 형태의 작업이 가능합니다.

다만, GROUP BY는 칼럼 내 데이터의 고윳값을 기준으로 그룹핑 작업을 하여 SUM(), COUNT() 등 집계 함수를 사용할 때 유리하고, DISTINCT중복 데이터를 제거만 하여 조회할 때 유리합니다.

 

SELECT ITEM_CODE
 FROM #TEMP
 GROUP BY ITEM_CODE
 
 -------------------------
 
 SELECT DISTINCT ITEM_CODE
   FROM #TEMP

<결과 1 >

ITEM_CODE
APPLE
BANANA
CHERRY

 

 

2. 중복된 데이터를 조회하는 방법

특정 컬럼을 기준으로 중복된 데이터를 확인하고 중복된 데이터가 몇 개(행)가  들어갔는지 확인하려고 하면 GROUP BY 문을 사용하여 중복값으로 검색하고 싶은 컬럼을 GROUP BY 문에 작성해 주면 됩니다.

 

같은 데이터가 2개 이상 들어가 있을 경우 즉, 중복 데이터가 있을 경우 이를  확인하기 위해 HAVING 문을 통해 GROUP 결과값에 대한 조건을 걸어 조회하면 아래 <결과 2>와 같이 나옵니다.

 

SELECT ITEM_CODE, COUNT(*) CNT
 FROM #TEMP
GROUP BY ITEM_CODE
HAVING COUNT(*) > 1

 

<결과 2>

ITEM_CODE CNT
APPLE 3
BANANA 2

 

3. 중복 데이터 제거하기

테이블에서 중복된 데이터를 아예 제거(DELETE) 하기 위해서는 ROW_NUMBER() OVER 함수PARTION BY 함수를 이용하면 됩니다. 컬럼 데이터에 순서값을 줘서 중복된 데이터를 하나만 남기고 그 외의 데이터는 제거할 수 있도록 쿼리문을 작성할 수 있습니다. 

 

https://jjin-todo.tistory.com/entry/MS-SQLPARTION%EC%82%AC%EC%9A%A9%EB%B2%95

 

MS SQL_PARTION사용법

1.PARTION 이란? 쿼리 결과 집합을 파티션으로 분할해준다. 2.PARTION 사용법 SELECT 순위함수() OVER(PARTITION BY 컬럼명 ORDER BY 컬럼명) FROM 테이블명 *순위함수 : ROW_NUMBER, RANK, DENSE_RANK *집계함수: SUM, AVG, MAX

jjin-todo.tistory.com

 

PARTION BY 는 GROUP 역할을 한다고 보시면 됩니다.   ITEM_CODE를 기준으로 그룹화한 후 QTY 컬럼을 내림차순으로 정렬하여 순위를 매겨준 것입니다. 결과는 <결과 3>의 표와 같습니다. 

 

SELECT ROW_NUMBER ()OVER (PARTITION BY ITEM_CODE ORDER BY QTY DESC)AS NUM, *
 FROM #TEMP

 

<결과 3>

NUM SEQ_NO ITEM_CODE QTY
1 3 APPLE 200
2 2 APPLE 150
3 1 APPLE 100
1 5 BANANA 25
2 4 BANANA 10
1 5 CHERRY 10

 


이렇게 조회된 테이블에서 NUM 필드값이 2 이상인 것들을 삭제해 주면 NUM = 1 인 고유의 값들만 남게 됩니다. 

DELETE A
  FROM (
           SELECT ROW_NUMBER ()OVER (PARTITION BY ITEM_CODE ORDER BY QTY DESC)AS NUM, *
             FROM #TEMP
  )A
  WHERE A.NUM >= 2

 

<테이블에서 중복 데이터 제거 후>

SEQ_NO ITEM_CODE QTY
3 APPLE 200
5 BANANA 25
5 CHERRY 10

 

이상으로 MS SQL 중복 데이터 제거 및 조회하는 방법에 대해 알아보았습니다. 감사합니다.

반응형