여러 열에 DISTINCT 적용하기
열 조합 전체에서 고유성을 유지합니다.
여러 열에 DISTINCT 적용하기은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
여러 열을 사용하는 이유
SELECT DISTINCT가 중복 행을 제거한다는 것은 이미 배웠습니다. 그렇다면 쿼리가 여러 열을 반환할 때 "중복"이란 무엇일까요?
선택한 모든 열의 값이 다른 행과 같을 때만 한 행을 중복으로 간주합니다. 열 하나라도 다르면 두 행 모두 유지됩니다.
예시 테이블: 주문
실험을 위해 작은 주문 테이블을 만들어 보겠습니다. 이 테이블에는 어떤 고객이 어떤 카테고리의 상품을 어느 국가에서 구매했는지가 저장됩니다.
CREATE TABLE orders (
id INTEGER,
customer VARCHAR(50),
category VARCHAR(50),
country VARCHAR(50)
);
INSERT INTO orders VALUES
(1, 'Alice', 'Electronics', 'US'),
(2, 'Alice', 'Books', 'US'),
(3, 'Bob', 'Electronics', 'UK'),
(4, 'Alice', 'Electronics', 'US'),
(5, 'Bob', 'Electronics', 'UK'),
(6, 'Carol', 'Clothing', 'CA');한 열에 DISTINCT 적용하기
다시 간단히 정리하면, 하나의 열에 DISTINCT를 사용하면 해당 열의 각 고유 값만 반환됩니다.
여기서는 고유한 고객 이름을 모두 가져옵니다. 주문은 여섯 개이지만 결과는 단 세 개의 행입니다.
SELECT DISTINCT customer
FROM orders;두 열에 DISTINCT 적용하기
이제 두 번째 열을 추가해 보겠습니다. DISTINCT 예약어는 여전히 SELECT 바로 뒤에 한 번만 작성합니다. 데이터베이스는 각각의 고유한 (고객, 카테고리) 쌍을 하나의 행으로 처리합니다.
Alice는 전자 제품에 한 번, 도서에 한 번 나타납니다. 두 조합이 서로 다르기 때문입니다.
SELECT DISTINCT customer, category
FROM orders;고유성 확인 방법
데이터베이스는 행 전체의 상태를 비교합니다. DISTINCT가 행을 제거하려면 SELECT 목록의 모든 열이 이미 확인한 행과 정확히 일치해야 합니다.
주문 테이블에서 3번 행과 5번 행은 모두 (Bob, 전자 제품, UK)입니다. 세 열이 모두 완전히 일치하므로 둘 중 하나가 제거됩니다.
SELECT DISTINCT customer, category, country
FROM orders;
-- Row (Bob, Electronics, UK) appears only once
-- even though it occurs on rows 3 and 5부분적으로 일치해도 제거되지 않습니다
Alice에게는 카테고리 = 전자 제품인 행이 두 개 있지만, 두 행 모두 국가 = US입니다. 세 열을 모두 선택하면 원래의 두 행이 동일하므로 하나만 남습니다.
선택 항목을 바꾸면 고유성 확인 방식도 함께 바뀝니다.
-- Select only customer + country
-- (Alice, US) appears twice in the table but DISTINCT keeps it once
SELECT DISTINCT customer, country
FROM orders;
-- Now add category back — uniqueness recalculated
SELECT DISTINCT customer, category, country
FROM orders;실제 활용 사례: 고유한 조합
흔히 사용하는 패턴은 두 속성의 모든 고유한 조합을 찾는 것입니다. 예를 들어 각 판매가 몇 번 발생했는지와 관계없이 어떤 제품 범주가 어떤 국가에서 판매되었는지 확인하는 경우입니다.
SELECT DISTINCT category, country
FROM orders
ORDER BY category, country;DISTINCT와 WHERE 결합하기
WHERE로 먼저 행을 필터링한 다음 DISTINCT가 필터링된 결과에서 중복을 제거합니다. 두 절은 독립적으로 작동합니다. WHERE는 데이터를 좁히고 DISTINCT는 중복을 제거합니다.
SELECT DISTINCT customer, category
FROM orders
WHERE country = 'US';DISTINCT와 GROUP BY 비교
고유한 조합을 얻는 동등한 방법은 GROUP BY를 사용하는 것입니다. 단순히 중복을 제거할 때는 두 접근 방식이 동일한 결과를 만듭니다. 집계가 필요할 때 차이가 생깁니다. GROUP BY를 사용하면 COUNT(*), SUM() 등의 집계 함수를 추가할 수 있지만 DISTINCT로는 추가할 수 없습니다.
-- Using DISTINCT
SELECT DISTINCT customer, category
FROM orders;
-- Equivalent using GROUP BY
SELECT customer, category
FROM orders
GROUP BY customer, category;고유한 조합 세기
여러 열에 적용한 DISTINCT를 하위 쿼리로 감싸면 고유한 조합이 몇 개 존재하는지 셀 수 있습니다. 이는 데이터의 다양성을 측정하는 편리한 방법입니다.
SELECT COUNT(*) AS unique_customer_category_pairs
FROM (
SELECT DISTINCT customer, category
FROM orders
) AS deduped;흔한 실수: DISTINCT는 모든 열에 적용됩니다
DISTINCT가 나열된 첫 번째 열에만 적용된다고 잘못 생각하는 경우가 많습니다. 그렇지 않습니다. DISTINCT는 선택한 모든 열로 구성된 전체 행을 항상 고려합니다.
다른 열의 중복은 유지하면서 일부 열에만 DISTINCT를 적용할 수는 없습니다. 이를 위해서는 ROW_NUMBER()와 같은 윈도 함수가 필요합니다.
-- This does NOT give distinct customers with any category
-- It gives distinct (customer, category) pairs
SELECT DISTINCT customer, category
FROM orders;
-- If you want one row per customer (any category), use:
SELECT customer, MIN(category) AS sample_category
FROM orders
GROUP BY customer;빠른 확인
여러 열에 DISTINCT를 사용하는 방법에 대한 이해도를 확인해 보세요.
강의 요약
잘하셨습니다! 여러 열에 DISTINCT를 사용하는 방법에 대해 배운 내용을 정리해 보겠습니다:
- DISTINCT는 전체 행에 적용됩니다. 모든 선택된 열을 함께 확인합니다.
- 모든 열이 이미 확인한 행과 정확히 일치할 때만 행이 제거됩니다.
- SELECT 목록에서 열을 추가하거나 제거하면 어떤 행이 중복으로 간주되는지가 달라집니다.
- DISTINCT를 WHERE 및 ORDER BY와 자유롭게 결합할 수 있습니다.
- GROUP BY는 동등한 대안이며 집계도 필요할 때 반드시 사용해야 합니다.
여러 열에 DISTINCT를 능숙하게 사용하면 어떤 데이터 집합에서도 고유한 조합을 효율적으로 탐색할 수 있습니다.
자주 묻는 질문
“여러 열에 DISTINCT 적용하기” 강의는 무료인가요?
네 — “여러 열에 DISTINCT 적용하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“여러 열에 DISTINCT 적용하기”에서 뭘 배우나요?
열 조합 전체에서 고유성을 유지합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“여러 열에 DISTINCT 적용하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- SELECT DISTINCT 기초
- 여러 열에 DISTINCT 적용하기
- PostgreSQL DISTINCT ON
- 고유한 값 세기