집계 함수와 DISTINCT
DISTINCT
를 집계 함수 안에서 사용하면, 중복을 제거한 뒤 계산할 수 있습니다.
지역별 고유 고객 수 세기
SELECT COUNT(DISTINCT client_id) FROM client_orders;
위 쿼리는 중복된 고객을 제외한 주문 고객 수를 반환합니다.
아래는 AVG()
와 DISTINCT
를 함께 사용하는 예시입니다.
고유한 주문 금액의 평균
SELECT AVG(DISTINCT order_total) FROM client_orders;
이 쿼리는 중복되는 주문 금액을 제외하고 고유한 주문 금액만으로 평균을 계산합니다.
AVG(DISTINCT column)
은 중복 값을 제거한 뒤 평균을 구하기 때문에, 단순AVG(column)
과 결과가 다를 수 있습니다.
DISTINCT와 UNIQUE의 차이
DISTINCT
와 UNIQUE
는 비슷해 보이지만 쓰임새가 다릅니다.
-
SELECT 절:
DISTINCT
: 표준 SQL 문법, 대부분의 DBMS에서 지원UNIQUE
: 일부 데이터베이스에서만 지원되는 비표준 동의어
-
CREATE TABLE:
UNIQUE
: 제약 조건만 사용 가능- 중복을 허용하지 않도록 컬럼 제약을 설정할 때 활용
중첩 집계(서브쿼리)
서브쿼리(Subquery)
는 다른 쿼리 안에 포함된 쿼리로, 이미 집계된 결과를 다시 요약할 때 사용됩니다.
예를 들어, 시도(지역)별 평균 주문 금액을 계산한 뒤, 그중 가장 높은 평균값을 찾는 예시는 다음과 같습니다.
평균 주문 금액이 가장 높은 시도 찾기
SELECT MAX(avg_total) FROM ( SELECT region, AVG(order_total) AS avg_total FROM clients JOIN client_orders ON clients.id = client_orders.client_id GROUP BY region ) AS region_averages;
- 내부 쿼리: 지역별 평균 주문 금액을 계산
- 외부 쿼리: 내부 쿼리 결과에서 가장 높은 평균값을 선택
서브쿼리를 활용하면, 단일 집계로는 표현하기 어려운 다단계 요약을 손쉽게 수행할 수 있습니다.
Quiz
0 / 1
SQL에서 집계 함수와 함께 DISTINCT를 사용하는 주된 목적은 무엇인가요?
쿼리 실행 속도를 높이기 위해서.
계산에 모든 행을 포함하기 위해서.
계산에서 중복 값을 제거하기 위해서.
결과를 특정 열로 그룹화하기 위해서.
학습 자료
AI 튜터
디자인
업로드
수업 노트
즐겨찾기
도움말
코드 에디터
코드 실행
코드 생성
DB 테이블 구조
실행 결과