반응형
1. 순위 집계 RANK(), DENSE RANK() 윈도우 함수
SQL RANK() 함수와 DENSE_RANK() 함수는 둘 다 SQL에서 사용되는 윈도우 함수로, 집계 함수와 함께 사용하여 데이터를 분석하는데 사용됩니다.
먼저, RANK() 함수는 결과 집합에서 각 레코드의 순위를 지정하는 데 사용됩니다. 만약 동일한 값을 가진 레코드가 있다면, 해당 레코드에 대해 동일한 순위가 부여됩니다. 예를 들어, 첫 번째 순위가 1이면, 두 번째로 큰 값도 2번 순위가 됩니다. 이러한 경우에 다음 순위는 건너뛰어집니다.
반면, DENSE_RANK() 함수는 RANK()와 유사하지만, 동일한 값을 가진 레코드에 대해 순위를 부여할 때 건너뛰는 것이 아니라, 다음 순위를 부여합니다. 예를 들어, 첫 번째 순위가 1이면, 두 번째로 큰 값도 2번 순위가 됩니다. 그러나 세 번째 값이 두 번째 값과 동일하다면, DENSE_RANK() 함수는 세 번째 값에 대해서도 2번 순위를 부여합니다.
따라서 RANK() 함수는 결과 집합에서 레코드 간 순위를 건너뛸 수 있지만, DENSE_RANK() 함수는 결과 집합에서 레코드 간 순위를 건너뛰지 않습니다.
2. WITH문
-- WITH문
-- 영화상영시간별로 SHORT, MEDIUM, LONG으로 나눴음
select film_id
,title
,(case
when length < 30 then 'SHORT'
when length >= 30 and length < 90 then 'MEDIUM'
when length > 90 then 'LONG'
end
) length
from film
;
-- WITH문을 이용해서 앞선 집합을 CTE_FILM으로 지정하고
-- 다른 SELECT문에서 CTE_FILM을 조회하기
with CTE_FILM as (
select film_id
,title
,(case
when length < 30 then 'SHORT'
when length >= 30 and length < 90 then 'MEDIUM'
when length > 90 then 'LONG'
end
) LENGTH_SML_NM
, length
from film
)
-- select * from CTE_FILM where length = 'LONG';
select A.film_id
,A.TITLE
,A.LENGTH_SML_NM
,A.LENGTH
from CTE_FILM A
where A.LENGTH_SML_NM ='MEDIUM'
order by A.TITLE
;
3.
반응형