본문 바로가기
Data Engineering

[SQLD 자격검정 실전문제] Part 2-1. 78번 적절한 SQL 실행결과 찾기

by 햣둘 2025. 6. 11.

정답 : 2번

COUNT(*)=2인 ID만 추출하고, CASE 조건에 따라 정렬하면 ID 100, 999가 출력됨.

999는 CASE WHEN 조건에 따라 정렬 시에 0으로 변환되므로 999, 1000 순으로 ASC 정렬이 됨. 

 

CASE WHEN ID=999 THEN 0 ELSE ID END

-> ID가 999이면 0으로 바꿔서 정렬하고, 그렇지 않으면 ID 그대로 사용

-> ID=999인 경우 : 정렬기준은 0 (가장 먼저) = ORDER BY로 ID=999를 최우선으로 정렬

DROP TABLE TBL;

CREATE TABLE TBL (
	ID NUMBER
);

INSERT INTO TBL VALUES (100);
INSERT INTO TBL VALUES (100);
INSERT INTO TBL VALUES (200);
INSERT INTO TBL VALUES (200);
INSERT INTO TBL VALUES (200);
INSERT INTO TBL VALUES (999);
INSERT INTO TBL VALUES (999);

# 실행 쿼리
SELECT ID
FROM TBL
GROUP BY ID
HAVING COUNT(*) = 2
ORDER BY (CASE WHEN ID=999 THEN 0 ELSE ID END);

 

[요약 설명]

이 문제는 GROUP BY, HAVING, CASE절을 활용한 조건부 정렬을 이해하고 있는지를 평가함.

특히 GROUP BY절에서 집계함수 조건과 CASE를 통한 커스텀 정렬을 올바르게 이해하는 것이 중요함.

[이론적 내용]

1. GROUP BY 및 HAVING 절

- GROUP BY는 동일한 값을 그룹으로 묶어 집계연산을 수행함

- HAVING은 그룹화된 결과에 대해 조건을 지정하는 절로, 여기서는 COUNT(*)=2인 그룹만 반환함

 

2. CASE 절을 활용한 ORDER BY

- CASE를 사용하여 특정 값에 대해 우선순위를 지정할 수 있음

- 여기서는 ID=999인 경우 0으로 설정하여 가장 먼저 정렬되도록 하고, 그 외에는 기본적으로 ID값을 기준으로 정렬함