728x90
매일 SQLD 기출 문제 풀기 챌린지
문제23.
아래의 SQL결과의 빈칸을 작성하시오.
[ 테이블명: SQLD23 ]
COL1 | COL2 | COL3 |
A | 가 | 10 |
A | 가 | 20 |
A | 다 | 25 |
B | 가 | 10 |
B | 나 | 30 |
B | 나 | 20 |
B | 나 | 60 |
C | 라 | 30 |
SQL :
SELECT NTILE_3, COUNT(*) AS ROWCNT
FROM (
SELECT COL1, COL2, COL3, NTILE(3) OVER(ORDER BY COL3) AS NTILE_3
FROM SQLD23
)
GROUP BY NTILE_3;
RESULT :
NTILE_3 | ROWCNT |
1 | (ㄱ) |
2 | 3 |
3 | (ㄴ) |
해설해보기
■ 데이터 분석 함수 NTILE
NTILE()은 데이터의 등급을 출력하는 함수이다.
NTILE(숫자) => 괄호 안에 숫자를 입력하면, 그 수 만큼 등급을 나눈다는 것을 의미한다.
여기서 중요한 것은
나누고자 하는 등급의 수에 맞게 행의 수를 동일하게 분배한 후
남은 수는 높은 등급부터 낮은 등급에 차례로 분배한다.
따라서 문제의 경우
NTILE(3)으로 등급을 3등급으로 나눠서 출력하는데,
COL3 컬럼을 기준으로 ASC하게 정렬한 후 등급을 나누고, 그 결과를 NTILE_3라고 지칭한다.
인라인 뷰 쿼리를 수행해보면, 아래와 같은 결과가 출력된다.
SELECT COL1, COL2, COL3, NTILE(3) OVER(ORDER BY COL3) AS NTILE_3
FROM SQLD23;
나누고자 하는 등급의 수에 맞게 행의 수를 동일하게 분배한 후
남은 수는 높은 등급부터 낮은 등급에 차례로 분배한다.
결과를 보면 3개의 등급에 맞게 행의 수를 동일하게 분배한 후에
남은 수는 높은 등급부터 낮은 등급 순서로 분배하여 1등급과 2등급에 3개씩 분배되고 3등급에는 2개만 분배된 것을 확인할 수 있다.
이 결과를 가지고 NTILE_3를 출력하는데, 각 등급별 개수를 출력한다.
그럼 최종 결과는 아래와 같다.
따라서 정답은 (ㄱ) = 3, (ㄴ) = 2 이다.
관련 스크립트
create table sqld23
( col1 varchar2(10),
col2 varchar2(10),
col3 number(10) );
insert into sqld23 values( 'A', '가', 10);
insert into sqld23 values( 'A', '가', 20);
insert into sqld23 values( 'A', '다', 25);
insert into sqld23 values( 'B', '가', 10);
insert into sqld23 values( 'B', '나', 30);
insert into sqld23 values( 'B', '나', 20);
insert into sqld23 values( 'B', '나', 60);
insert into sqld23 values( 'C', '라', 30);
commit;
select * from sqld23;
반응형
'SQL 문제 풀기 > 2. SQLD 기출 : 2024.3.01~2024.4.25' 카테고리의 다른 글
<SQLD 25> Like 연산자에 대한 기출문제 (0) | 2024.03.25 |
---|---|
<SQLD 24> count 그룹함수/연산자 우선순위에 대한 기출문제 (0) | 2024.03.24 |
<SQLD 22> select 문의 6가지절의 실행순서에 대한 기출문제 (2) | 2024.03.22 |
<SQLD 21> NULL 값에 대한 이해 (0) | 2024.03.21 |
<SQLD 20>그룹함수 SUM에 대한 기출문제 (0) | 2024.03.20 |