SQL 11-10. "Top-N"분석
관련링크
본문
․ Top-N 질의는 열에서 가장 큰 n개의 값 또는 가장 작은 n개의 값을 요청한다.
예를 들어
- 가장 많이 팔린 제품 10가지는?
- 가장 적게 팔린 제품 10가지는?
․ 최대값 집합 및 최소값 집합은 모두 Top-N 질의에 해당한다.
예를 들어, Top-N분석을 사용하여 다음 유형의 질의를 수행할 수 있다.
․ 회사의 최상위 소득자 세 명 ․ 회사에 가장 최근에 입사한 신입 사원 네 명
․ 제품을 가장 많이 판매한 영어 사원 두 명 ․ 최근 6개월 동안 가장 많이 팔린 제품 세 가지
“Top-N" 분석 수행 형식
SELECT [(column_list], ROWNUM -- 정열
FROM (SELECT [column_list] FROM table ORDER BY Top-N_column)
WHERE ROWNUM <= N; -- 다시정열
Top-N 질의는 다음에 설명된 요소와 함께 일관성 있는 중첩 질의 구조를 사용한다.
․ 정렬된 데이터 목록을 생성하는 서브 쿼리 또는 인라인 뷰는 ORDER BY 절을 포함하므로 데이터를 원하는 순서로 정렬 할 수 있다.
최대값을 검색하려면 DESC 파라미터가 필요하다.
․ 최종 결과 집합의 행 수를 제한하는 외부 질의, 외부 질의는 다음 구성 요소를 포함한다.
․ ROWNUM 의사 열 : 서브 쿼리에서 반환되는 각 행에 1부터 시작하는 순차값을 할당한다.
․ WHERE 절 : 반환될 n개 행을 지정한다.
외부 WHERE 절은 < 또는 <= 연산자를 사용해야 한다.
MSSQL 디비 예제 :
SELECT TOP 3 lname, job_lvl
FROM employee
ORDER BY job_lvl DESC
/*
SELECT lname, job_lvl
FROM (SELECT lname, job_lvl FROM employee ORDER BY job_lvl DESC)
WHERE rownum <= 3
메시지 1033, 수준 15, 상태 1, 줄 4
TOP 또는 FOR XML을 함께 지정하지 않는 한 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 식에서
ORDER BY 절을 사용할 수 없습니다.
** 인라인 뷰를 이용해서 TOP N분석을 할 수 없다. **
*/
select user_name() --현 사용자 확인