콘텐츠로 건너뛰기

SQL SELECT문 – 중복 제거와 특정 컬럼 제외하기

이번 글에서는 SQL 쿼리에서 자주 쓰이는 두 가지 기능인 SELECT DISTINCTEXCEPT에 대해 설명하겠다. 데이터 분석 작업을 하다 보면, 중복된 데이터나 불필요한 컬럼들을 제외하고자 할 때가 많다. 이를 효과적으로 처리하는 방법을 살펴보자.

■ SELECT문 – DISTINCT: 중복 제거

데이터가 중복되는 경우, 우리가 원하는 것은 유일한 값만을 추출하는 것이다. 이때 DISTINCT를 사용하여 중복을 제거할 수 있다.

SELECT DISTINCT(컬럼이름) FROM 데이터베이스-이름;

DISTINCT는 특정 컬럼의 중복된 값들을 한 번만 나타내준다. 예를 들어, 다음과 같은 테이블이 있다고 해보자.

LinkplayerIDbirthCountrybirthMonth
1HGDKorea12
2KCSKorea2
3SebastianGermany3
SELECT DISTINCT(birthCountry) FROM People;

위 쿼리에서는 People DB에서 선수들이 태어난 국가(birthCountry)를 중복 없이 조회하여 결과는 Korea와 German, 2개만 나타난다.

예를 들어, 여러 쇼핑몰의 거래 데이터를 분석한다고 해보자. 만약 크리스마스 시즌 특정 이벤트에서 발생한 주문번호를 알고 싶다면, 다음과 같은 쿼리를 사용할 수 있다.

SELECT DISTINCT(order_id) FROM Transactions WHERE event = 'christmas_sale';

■ SELECT문 – EXCEPT: 특정 컬럼 제외하기

SELECT *는 테이블의 모든 컬럼을 조회할 때 쓰인다. 하지만 때로는 불필요한 컬럼을 제외하고 싶을 때가 있다. 이럴 때 EXCEPT를 사용하면 편리하다. 구문은 다음과 같다.

SELECT * EXCEPT (제외할-컬럼1, 제외할-컬럼2) FROM 데이터베이스-이름;

예를 들어, 특정 트랜잭션 데이터의 로그 기록을 분석할 때, 관리용 메타데이터가 포함된 컬럼을 제외하고 싶을 수 있다. 관리용 메타데이터란, 데이터베이스에서 데이터를 추적하고 관리하기 위해 추가된 정보를 말한다. 즉, 실제 비즈니스 데이터(예: 주문 번호, 고객 정보) 외에, 데이터를 처리, 관리, 혹은 추적하는 데 필요한 부가적인 정보이다.

이러한 메타데이터는 주로 시스템(DBT – Data Build Tool)이 자동으로 생성하거나 기록하며, 데이터의 변동 사항을 추적하는 데 사용되는데 몇 가지 예시를 보면:

  1. dbt_scd_id: 데이터 변경을 추적하기 위한 고유한 식별자. 이 컬럼은 데이터가 변경될 때마다 새로운 버전을 기록하기 위해 사용될 수 있다.
  2. dbt_updated_at: 데이터가 마지막으로 수정된 시간을 기록하는 타임스탬프. 언제 데이터가 변경되었는지 알기 위해 필요하다.
  3. dbt_valid_from, dbt_valid_to: 해당 데이터가 유효한 기간을 나타내는 컬럼들. 예를 들어, 특정 트랜잭션 데이터가 어떤 시점부터 언제까지 유효했는지를 기록하는 용도로 쓰인다.

이러한 메타데이터는 데이터를 관리하고 감사(audit)하기 위해 중요하지만, 분석 작업이나 리포트 작성 시에는 불필요한 경우가 많기 때문에 제외하는 것이 일반적이다. 이럴 때 EXCEPT를 사용하면 된다.

SELECT * EXCEPT (dbt_scd_id, dbt_updated_at) FROM Transactions;