본문 바로가기

Oracle/SQL

SQL Sub Query From 절 In Line View

from 절의 서브쿼리 라고도 하거나 in line view 라고도 한다.

서브쿼리를 view 로 생성하면 더 간단하게 작성 가능하다.

문제 :  순위를 1등만 출력

select *
from ( select ename, sal, rank() over (order by sal desc)as 순위 
       from emp )
where 순위 =1;

 

범죄발생 시간 테이블 생성

문제 366 언피봇을 이용하여 컬럼을 데이터로 넣고 살인이 일어나는 시간과 건수 출력하시오

  1. 일단 언피봇문 생성
  2. select * 
    from crime_time 
    unpivot (건수 for 시간 
              in (F0T3, F3T6 , F6T9 , F9T12 , F12T15, F15T18, F18T21, F21T24)
             );
  3. 살인의 시간, 건수를 구한다.
select 시간, 건수
from ( select *
       from crime_time 
       unpivot (건수 for 시간
                in (F0T3, F3T6 , F6T9 , F9T12 , F12T15, F15T18, F18T21, F21T24)
                ) 
      ) 
where crime_type = '살인';

문제 367 살인이 일어난 시간과 건수와 순위를 출력

select 시간, 건수, rank() over (order by 건수 desc) as 순위
from ( select * 
       from crime_time
       unpivot (건수 for 시간 
                 in (F0T3, F3T6 , F6T9 , F9T12 , F12T15, F15T18, F18T21, F21T24)
                ) 
      )
where crime_type = '살인';

문제 368 방화사건이 가장 많이 일어나는 시간대 출력 (1등만출력)

select 시간
from ( select 시간, 건수, rank() over (order by 건수 desc) as 순위
        from ( select * 
               from crime_time 
               unpivot (건수 for 시간
                        in (F0T3, F3T6 , F6T9 ,F9T12,F12T15,F15T18,F18T21,F21T24
                            )
                        ) 
              ) 
       where crime_type = '방화'
       )
where 순위 = 1;