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
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 중복 데이터 제거 및 조회하는 방법에 대해 알아보았습니다. 감사합니다.
'MS SQL' 카테고리의 다른 글
CASE WHEN 함수 사용법, SELECT , UPDATE, WHERE 절 활용 방법 (0) | 2023.08.03 |
---|---|
MS SQL_REPLACE, TRANSLATE 함수로 다중 문자열 치환하는 방법 (0) | 2023.08.02 |
MS SQL_ UNPIVOT 사용하는 방법 (0) | 2023.04.28 |
MS SQL_최상위 데이터, 최하위 데이터 구하는 방법 (0) | 2023.04.24 |
MS SQL_SQL 계정의 암호가 만료되었습니다. (0) | 2023.03.06 |