고유성 판단에서 DISTINCT와 GROUP BY 비교하기
DISTINCT가 올바른 답인 경우와 면접관이 GROUP BY를 기대하는 경우를 알아봅니다.
고유성 판단에서 DISTINCT와 GROUP BY 비교하기은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
DISTINCT의 기능
DISTINCT는 중복 행을 제거합니다. 면접관이 확인하는 핵심은 DISTINCT가 한 열이 아니라 선택한 행 전체에 적용된다는 점입니다. 따라서 SELECT DISTINCT a, b는 (a, b) 쌍의 중복을 제거합니다.
SELECT DISTINCT department
FROM employees;DISTINCT는 선택한 모든 열에 적용됩니다
여러 열을 선택하면 DISTINCT는 각각의 고유한 조합을 유지합니다. 즉, (department, job_title) 쌍마다 한 행씩 남습니다. 한 열만 중복 제거하는 표준적인 방법은 없습니다.
SELECT DISTINCT department, job_title
FROM employees;GROUP BY의 기능
GROUP BY는 같은 키를 공유하는 행을 하나의 그룹으로 묶어 그룹마다 한 행으로 축약합니다. 그 자체로는 한 열을 기준으로 그룹화한 결과가 해당 열에 DISTINCT를 적용한 결과와 같습니다.
SELECT department
FROM employees
GROUP BY department;
-- equivalent to:
SELECT DISTINCT department
FROM employees;실제 차이: 집계
그렇다면 언제 달라질까요? 집계가 필요할 때입니다. GROUP BY는 그룹별로 COUNT, SUM 또는 AVG를 계산할 수 있지만 DISTINCT는 계산할 수 없습니다. 고유한 행이 필요하면 DISTINCT를, 그룹별 지표가 필요하면 GROUP BY를 사용하십시오.
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;DISTINCT는 그룹별로 집계할 수 없습니다
DISTINCT에 집계 기능을 덧붙일 수는 없습니다. “부서별 직원 수는 몇 명인가?”를 구하려면 SELECT DISTINCT가 아니라 COUNT(*)와 함께 사용하는 GROUP BY가 항상 올바른 도구입니다.
-- WRONG intent: this errors or returns one total row
-- SELECT DISTINCT department, COUNT(*) FROM employees;
-- RIGHT:
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;COUNT(DISTINCT)는 두 개념을 결합합니다
자주 사용하는 조합이 있습니다. COUNT(DISTINCT col)은 각 그룹 안에서 고유한 값을 셉니다. 여기서 DISTINCT는 집계 내부에 있으며 “부서별로 서로 다른 직함이 몇 개인가?”라는 질문에 답합니다.
SELECT department,
COUNT(DISTINCT job_title) AS distinct_titles
FROM employees
GROUP BY department;전체에서 고유한 값 세기
GROUP BY가 없으면 COUNT(DISTINCT col)은 전체 테이블에서 고유한 값을 셉니다. “서로 다른 부서가 몇 개 있는가?”라는 질문에 깔끔하게 답할 수 있습니다.
SELECT COUNT(DISTINCT department) AS n_departments
FROM employees;
-- equivalently, count the deduped subquery
SELECT COUNT(*)
FROM (SELECT DISTINCT department FROM employees) d;성능은 대체로 차이가 없습니다
DISTINCT와 GROUP BY 중 어느 쪽이 더 빠를까요? 단순한 중복 제거에서는 보통 동일합니다. 최적화기가 두 방식을 비슷하게 계획하기 때문입니다. 의도에 따라 선택하십시오. 고유한 행에는 DISTINCT를, 집계에는 GROUP BY를 사용합니다.
DISTINCT와 NULL
DISTINCT는 NULL을 어떻게 처리할까요? 모든 NULL을 같은 값으로 취급하므로 여러 NULL 행이 하나로 합쳐집니다. GROUP BY도 마찬가지로 NULL을 하나의 그룹으로 만듭니다.
-- If manager_id has several NULLs, this returns one NULL row
SELECT DISTINCT manager_id
FROM employees;Postgres의 DISTINCT ON(추가 내용)
추가로 알아 둘 내용입니다. Postgres에는 ORDER BY가 지정한 키별 첫 번째 행을 유지하는 비표준 DISTINCT ON (expr)이 있습니다. 이식 가능한 코드에서는 대신 ROW_NUMBER()를 사용합니다.
-- Postgres only: latest order per customer
SELECT DISTINCT ON (customer_id) customer_id, order_id, order_date
FROM orders
ORDER BY customer_id, order_date DESC;DISTINCT는 한 열이 아니라 전체 SELECT에 적용됩니다
또 하나의 함정이 있습니다. DISTINCT는 전체 행에 적용되므로 SELECT DISTINCT customer_id, order_date는 고객마다 한 행을 반환하지 않습니다. 이 경우에는 MAX와 함께 GROUP BY를 사용하거나 윈도 함수를 사용하십시오.
-- Does NOT give one row per customer
SELECT DISTINCT customer_id, order_date FROM orders;
-- One row per customer: latest order date
SELECT customer_id, MAX(order_date) AS last_order
FROM orders
GROUP BY customer_id;빠른 확인
알맞은 도구를 선택합니다.
복습
복습해 보겠습니다. DISTINCT는 전체 행의 중복을 제거하고, GROUP BY는 키를 기준으로 행을 축약하며 집계를 가능하게 합니다. COUNT(DISTINCT col)은 고유한 값을 세고, 두 방식 모두 NULL을 하나의 값으로 취급하며, 성능은 대체로 차이가 없습니다.
자주 묻는 질문
“고유성 판단에서 DISTINCT와 GROUP BY 비교하기” 강의는 무료인가요?
네 — “고유성 판단에서 DISTINCT와 GROUP BY 비교하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“고유성 판단에서 DISTINCT와 GROUP BY 비교하기”에서 뭘 배우나요?
DISTINCT가 올바른 답인 경우와 면접관이 GROUP BY를 기대하는 경우를 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“고유성 판단에서 DISTINCT와 GROUP BY 비교하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 열 투영과 별칭의 함정
- 계산 열과 수식 우선순위
- 고유성 판단에서 DISTINCT와 GROUP BY 비교하기
- SELECT에서 CASE 수식 사용하기