정답 : 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값을 기준으로 정렬함
'Data Engineering' 카테고리의 다른 글
[SQLD 자격검정 실전문제] Part 2-1. 80번 날짜 데이터 SQL 실행 결과 찾기 (0) | 2025.06.11 |
---|---|
[SQLD 자격검정 실전문제] Part 2-1. 79번 오류가 발생하는 SQL 찾기 (0) | 2025.06.11 |
[SQLD 자격검정 실전문제] Part 2-1. 77번 SQL의 실행 결과 찾기 (0) | 2025.06.09 |
[SQLD 자격검정 실전문제] Part 2-1. 76번 트랜잭션(SAVEPOINT) (0) | 2025.06.09 |
[SQLD 자격검정 실전문제] Part 2-1. 75번 SQL 선택하기 (광고명, 광고시작일자) (0) | 2025.06.06 |