순위매기기
ROWNUM으로 만들면 같은 금액도 순위가 넘어간다
SELECT ename, sal, rownum
FROM
(
SELECT ename, sal
FROM emp
);
ROWNUM으로 순위 합치기
+ LAG OVER 함수는 순서를 미루는 함수
SELECT ename, s1, s2, DECODE(s1, s2, NO-1, NO)
FROM
(
SELECT ename, sal "S1", LAG(sal, 1, 0) OVER(ORDER BY sal DESC) "S2", ROWNUM "NO"
FROM
(
SELECT ename, sal
FROM emp -- 프롬으로 퍼올릴때 로우넘 번호가 매겨진다
ORDER BY Sal desc
)
);
RANK OVER를 이용한 순위합치기
SELECT ename, sal, RANK() OVER (ORDER BY sal DESC)
FROM emp;
RANK() OVER 를 이용해서 학생 키 순위 구하기
SELECT name, height, RANK() OVER (ORDER BY height DESC) "RANK"
FROM student;
학년별 키순위를 구하시오
union all 방식
SELECT name, grade, height, RANK() OVER (ORDER BY height DESC) "RANK"
FROM student
WHERE grade = 1
UNION ALL
SELECT name, grade, height, RANK() OVER (ORDER BY height DESC) "RANK"
FROM student
WHERE grade = 2
UNION ALL
SELECT name, grade, height, RANK() OVER (ORDER BY height DESC) "RANK"
FROM student
WHERE grade = 3
UNION ALL
SELECT name, grade, height, RANK() OVER (ORDER BY height DESC) "RANK"
FROM student
WHERE grade = 4;
PARTITION 방식
SELECT name, grade, height, RANK() OVER (PARTITION BY grade ORDER BY height DESC) "RANK"
FROM student;
RANK, DENSE_RANK, ROW_NUMBER 비교
SELECT empno, ename, job, sal,
RANK() OVER (ORDER BY sal DESC) sal_rank,
DENSE_RANK() OVER (ORDER BY sal DESC) sal_dense_rank,
ROW_NUMBER() OVER (ORDER BY sal DESC) sal_row_num
FROM emp;
--------------------------
'Database > OracleSQL' 카테고리의 다른 글
200401 카티션 곱, ANSI 조인, MYSQL 라이센스, EQUI Join, 데이터베이스는 CLASS 타입이 없다, 외래키 기본키 (0) | 2020.04.01 |
---|---|
오라클 조인, INNER JOIN, OUTER JOIN (0) | 2020.04.01 |
200326 OLTP, OLAP ROLLUP (0) | 2020.03.26 |
오라클 피벗 PIVOT 대신 직접짜기 (0) | 2020.03.26 |
오라클 소계값, 총계값, ROLLUP (0) | 2020.03.26 |