본문 바로가기
SQL 문제 풀기/2. SQLD 기출 : 2024.3.01~2024.4.25

<SQLD 23> ntile 함수 관련 기출문제

by HYEHYE_SON 2024. 3. 23.
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;

 
 
 
 
 
 
 
 
 
 

반응형