728x90
매일 SQLD 기출 문제 풀기 챌린지
문제 50.
주어진 데이터에 대해서 아래의 SQL문을 수행하였을 때의 결과값이 아래의 결과와 같을때 ( )빈칸에 들어갈 값을 적으시오.
[TEST50]
CREATE TABLE TEST50(
COL1 VARCHAR(10),
COL2 VARCHAR(10),
COL3 NUMBER(10)
);
INSERT INTO TEST50 VALUES('A','가',10);
INSERT INTO TEST50 VALUES('A','가',20);
INSERT INTO TEST50 VALUES('A','다',25);
INSERT INTO TEST50 VALUES('B','가',10);
INSERT INTO TEST50 VALUES('B','나',30);
INSERT INTO TEST50 VALUES('B','나',20);
INSERT INTO TEST50 VALUES('B','나',60);
INSERT INTO TEST50 VALUES('C','라',30);
[SQL]
SELECT NTILE_2, COUNT(*) AS ROWCNT
FROM (
SELECT COL1, COL2, COL3, NTILE(3) OVER(ORDER BY COL3) AS NTILE_2
FROM TEST50
)
GROUP BY NTILE_2;
[RESULT]
NTILE_2 | ROWCNT |
1 | 3 |
2 | 3 |
( ) | ( ) |
답 : _____
해설해보기
■ 데이터 분석 함수 NTILE
NTILE()은 데이터의 등급을 출력하는 함수입니다.
NTILE(숫자) => 괄호 안에 숫자를 입력하면, 그 수 만큼 등급을 나눈다는 것을 의미합니다.
여기서 중요한 것은
나누고자 하는 등급의 수에 맞게 행의 수를 동일하게 분배한 후
남은 수는 높은 등급부터 낮은 등급에 차례로 분배한다는 점 입니다.
문제의 인라인 뷰를 보면,
COL1, COL2, COL3을 출력하고,
NTILE(3)으로 등급을 3등급으로 나눠서 출력합니다.
이때, COL3 컬럼을 기준으로 ASC 하게 정렬한 후 등급을 나누고, 그 결과를 NTILE_2 라고 명명합니다.
등급은 8개의 행을 2개씩 분배한 뒤
남은 2개를 높은 등급에 각 1씩 분배합니다.
따라서 1등급 3개, 2등급 3개, 3등급 2개가 출력된 것을 확인할 수 있습니다.
인라인 뷰 쿼리를 수행해보면, 아래와 같은 결과가 출력된다.
SELECT COL1, COL2, COL3, NTILE(3) OVER(ORDER BY COL3) AS NTILE_2
FROM TEST50
메인쿼리는 인라인뷰에서 출력된 결과를 기반으로
NTILE_2 을 GROUP으로 묶어서 NTILE_2 별 건수를 출력하는 쿼리입니다.
SELECT NTILE_2, COUNT(*) AS ROWCNT
FROM (
SELECT COL1, COL2, COL3, NTILE(3) OVER(ORDER BY COL3) AS NTILE_2
FROM TEST50
)
GROUP BY NTILE_2;
따라서 정답은
3, 2 입니다.
관련 스크립트
CREATE TABLE TEST50(
COL1 VARCHAR2(10),
COL2 VARCHAR2(10),
COL3 NUMBER(10)
);
INSERT INTO TEST50 (COL1, COL2, COL3) VALUES ('A', '가', 10);
INSERT INTO TEST50 (COL1, COL2, COL3) VALUES ('A', '가', 20);
INSERT INTO TEST50 (COL1, COL2, COL3) VALUES ('A', '다', 25);
INSERT INTO TEST50 (COL1, COL2, COL3) VALUES ('B', '가', 10);
INSERT INTO TEST50 (COL1, COL2, COL3) VALUES ('B', '나', 30);
INSERT INTO TEST50 (COL1, COL2, COL3) VALUES ('B', '나', 20);
INSERT INTO TEST50 (COL1, COL2, COL3) VALUES ('B', '나', 60);
INSERT INTO TEST50 (COL1, COL2, COL3) VALUES ('C', '라', 30);
반응형
'SQL 문제 풀기 > 2. SQLD 기출 : 2024.3.01~2024.4.25' 카테고리의 다른 글
<SQLD 52> rollup에 대한 기출문제 (0) | 2024.04.22 |
---|---|
<SQLD 51> 조인에 대한 기출문제 (0) | 2024.04.21 |
<SQLD 49> Order by 에 대한 기출문제 (1) | 2024.04.18 |
<SQLD 48> 레포팅 함수에 대한 기출문제 (0) | 2024.04.17 |
<SQLD 47> natural join에 대한 기출문제 (0) | 2024.04.16 |