중복 레코드를 카운트하고 그룹화하는 SQL 쿼리 이해하기

데이터베이스 관리의 영역에서 개발자들이 직면하는 일반적인 문제 중 하나는 데이터 세트 내에서 중복 레코드를 효율적으로 식별하는 것입니다. 이는 데이터 무결성을 유지하고 데이터 세트에 대해 수행된 분석이 정확한 정보를 반영하도록 하는 데 중요합니다. 이 블로그 포스트에서는 테이블에서 Name이 두 번 이상 나타나는 레코드를 검색할 수 있는 간단한 SQL 쿼리를 탐구해 보겠습니다.

시나리오: 데이터 세트

다음과 같이 구조화된 간단한 데이터 세트를 고려해 보세요:

이름
1
2
3
4
5
6

이 데이터 세트에서 두 번 이상 반복되는 이름을 찾고자 합니다. 예를 들어, 이 경우 이 두 번 이상 나타나지만, 특히 중복이 있는 이름을 가져오는 데 관심이 있습니다.

SQL 쿼리 작성하기

우리 문제의 해결책은 SQL에서 COUNT 함수와 GROUP BY 절을 사용하는 것입니다. 쿼리를 단계별로 나누어 보겠습니다:

SQL 쿼리

SELECT Name, COUNT(Name) AS Count 
FROM Table
GROUP BY Name
HAVING COUNT(Name) > 1
ORDER BY COUNT(Name) DESC;

쿼리 구성 요소 설명

  • SELECT Name, COUNT(Name) AS Count: 이 쿼리의 일부는 Name 열을 선택하고 각 이름이 얼마나 자주 나타나는지를 계산합니다. 결과는 Count로 레이블이 붙습니다.

  • FROM Table: Table을 데이터 세트 테이블의 실제 이름으로 바꿉니다. 이는 SQL에게 어떤 테이블을 쿼리할지 지시합니다.

  • GROUP BY Name: 이는 결과를 이름별로 그룹화하며, 동일한 이름은 하나의 레코드로 결합됩니다.

  • HAVING COUNT(Name) > 1: 이 필터는 한 번 이상 나타나는 이름만 최종 결과에 포함되도록 보장합니다.

  • ORDER BY COUNT(Name) DESC: 마지막으로, 이 구문은 결과를 정렬하여 가장 많이 나타나는 이름이 먼저 표시되도록 합니다.

예상 출력

위 쿼리를 데이터 세트에 실행하면 다음과 같은 출력을 받게 됩니다:

이름

이 출력은 두 번 이상 나타나는 이름을 보여주며, 이 경우 이 포함됩니다.

보너스 팁: 중복 삭제

중복을 카운트하고 그룹화하는 것 외에도 테이블에서 중복 레코드를 제거해야 할 필요가 있을 수 있습니다. 다음은 이를 수행하는 방법입니다:

중복 레코드를 삭제하는 SQL 쿼리

DELETE FROM Table
WHERE Key IN (
    SELECT MAX(Key)
    FROM Table
    GROUP BY Name
    HAVING COUNT(Name) > 1
);

삭제 쿼리 설명

  • DELETE FROM Table: 이는 지정된 테이블에서 특정 레코드를 삭제할 것임을 나타냅니다.

  • WHERE Key IN: 이 절은 다음 서브쿼리의 결과를 기반으로 제거할 레코드의 조건을 정의합니다.

  • SELECT MAX(Key): 이 부분은 테이블에서 각 이름에 대한 최대(또는 최신) 키를 찾습니다.

  • GROUP BY Name HAVING COUNT(Name) > 1: 이전 쿼리와 유사하게 중복이 있는 이름만 고려하도록 합니다.

결론

요약하자면, SQL 데이터베이스 내 중복 값을 효과적으로 관리하는 것은 간단한 쿼리를 사용하여 이루어질 수 있습니다. SELECT, COUNT, GROUP BY, 및 HAVING의 조합은 데이터 세트에서 중복 이름을 식별하는 우아한 방법을 제공합니다. 또한 삭제 쿼리를 이해함으로써, 깔끔한 데이터 세트를 효율적으로 유지할 수 있습니다. 기록을 깔끔하게 유지하는 것은 정확한 데이터 분석 및 보고를 위해 필수적임을 기억하세요.

쿼리 즐겁게 하세요!