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

<SQLD 28> row_number() 함수에 대한 기출문제

by HYEHYE_SON 2024. 3. 28.
728x90

매일 SQLD 기출 문제 풀기 챌린지


 


문제28.

아래의 SQL에 대한 결과를 적으시오.

 

[TAB1]

COL1 COL2 COL3 COL4
1 2 200 20
2 3 240 10
3 4 100 20
4 5 230 20
5 6 300 20
6 7 400 10

 

 

[ SQL  ]

SELECT COL2, COL1
FROM (SELECT ROW_NUMBER() OVER(PARTITION BY COL4 ORDER BY COL3 DESC) RN,
      COL1, COL2 
      FROM TAB1
      WHERE COL1 <> 5 AND COL4 > 10)
WHERE RN = 1;

 

답 :            ?            


해설해보기

SQL을 풀기 위해선
IN LINE VIEW를 우선적으로 풀어야한다.

1. IN LINE VIEW
테이블 TAB1 에서  데이터를 출력하는데, COL1, COL2와 RN을 출력합니다.
이때 RN은 COL4를 기준으로 PARTITIONING 된 상태에서 COL3을 기준으로 DESC하게 정렬된 ROW_NUMBER로 생성된 컬럼입니다. 

단, COL1은 5가 아니며, COL4는 10보다 작은 조건을 충족하는 데이터만 출력합니다.

2. MAIN QUERY
IN LINE VIEW의 결과를 기반으로 COL2와 COL1을 출력하는데, RN = 1인 데이터만 출력해야합니다.
RN은 COL3을 기준으로 DESC하게 정렬된 결과를 기반으로 생성 되어 있기 때문에 
COL4가 20인 데이터들 중 COL3이 가장 큰 행의 값이 정답입니다. 
단, COL1이 5가 아닌 조건이 존재하기 때문에 

정답은 5와 4 입니다.

 

 


 
 
 

반응형