SELECT 함수명(파라미터)
OVER
([PARTITION BY 컬럼1, ...]
[ORDER BY 컬럼A, ...])
FROM 테이블명
분류 | 설명 | 종류 |
---|---|---|
순위 함수 | 레코드의 순위를 계산하는 함수 | RANK, DENSE_RANK, ROW_NUMBER |
행 순서 함수 | 레코드에서 가장 먼저 나오거나 가장 뒤에 나오는 값, 이전/이후의 값들을 출력하는 함수 Oracle에서만 지원 | FIRST_VALUE, LAST_VALUE, LAG, LEAD |
그룹내 비율 함수 | 백분율을 보여주거나 행의 순서별 백분율 등 비율과 관련된 통계를 보여주는 함수 | RATIO_TO_REPORT, PERCENT_RANK |
순위 함수 | 설명 |
---|---|
RANK | - 특정 항목에 대한 순위를 구하는 함수 - 동일 순위의 레코드 존재시 후순위 넘어감(2위가 3개인 레코드: 2위2위2위5위6위) |
DENSE_RANK | - 레코드의 순위를 계산 - 동일 순위의 레코드 존재시 후순위 넘어가지 않음(2위가 3개인 레코드: 2위2위2위3위4위) |
ROW_NUMBER | - 레코드의 순위를 계산 - 동일 순위의 값이 존재해도 이와 무관하게 연속 번호를 부여(2위가 3개인 레코드: 2위3위4위5위6위) |
SELECT NAME, SALARY,
RANK() OVER(ORDER BY SALARY DESC) A,
DENSE_RANK() OVER(ORDER BY SALARY DESC) B,
ROW_NUMBER() OVER(ORDER BY SALARY DESC) C
FROM EMP;
행순서 함수 | 설명 |
---|---|
FIRST_VALUE | - 파티션별 윈도에서 가장 먼저 나오는 값을 찾음 - 집계 함수의 MIN과 동일한 결과를 출력 |
LAST_VALUE | - 파티션별 윈도에서 가장 늦게 나오는 값을 찾음 - 집계 함수의 MAX와 동일한 결과를 출력 |
LAG | - 파티션별 윈도에서 이전 로우의 값 반환 - SQL Server에서 지원하지 않음 |
LEAD | - 파티션별 윈도에서 이후 로우의 값 반환 - SQL Server에서 지원하지 않음 |
SELECT NAME, SALARY,
FIRST_VALUE(NAME) OVER(ORDER BY SALARY) A,
LAST_VALUE(NAME) OVER(ORDER BY SALARY) B,
LAG(NAME) OVER(ORDER BY SALARY DESC) C,
LEAD(NAME) OVER(ORDER BY SALARY DESC) D
FROM EMP;
그룹 내 비율 함수 | 설명 |
---|---|
RATIO_TO_REPORT | - 주어진 그룹에 대해 합을 기준으로 각 로우의 상대적 비율을 반환하는 함수 - 결괏값은 0~1의 범위 값을 가짐 - OVER 괄호 안에 컬럼 생략 시 그룹은 테이블 전체가 대상 |
PERCENT_RANK | - 주어진 그룹에 대해 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 하여, 값이 아닌 행의 순서별 백분율을 구하는 함수 - 결괏값은 0~1의 범위값을 가짐 - SQL Server에서 지원하지 않음 |
SELECT NAME, SALARY,
RATIO_TO_REPORT(SALARY) OVER() A,
PERCENT_RANK() OVER(ORDER BY SALARY DESC) B
FROM EMP;