ROLLUP and RANK
The following query uses ROLLUP
and RANK
to get the salary ranks by department.
CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
SAL NUMBER(7, 2),
DEPTNO NUMBER(2));
INSERT INTO EMP VALUES (1, 'SMITH', 'CLERK', 800, 20);
INSERT INTO EMP VALUES (2, 'ALLEN', 'SALESMAN', 1600, 30);
INSERT INTO EMP VALUES (3, 'WARD', 'SALESMAN', 1250, 30);
INSERT INTO EMP VALUES (4, 'JONES', 'MANAGER', 2975, 20);
INSERT INTO EMP VALUES (5, 'MARTIN','SALESMAN', 1250, 30);
INSERT INTO EMP VALUES (6, 'BLAKE', 'MANAGER', 2850, 30);
INSERT INTO EMP VALUES (7, 'CLARK', 'MANAGER', 2850, 10);
INSERT INTO EMP VALUES (8, 'SCOTT', 'ANALYST', 3000, 20);
INSERT INTO EMP VALUES (9, 'KING', 'PRESIDENT',3000, 10);
INSERT INTO EMP VALUES (10,'TURNER','SALESMAN', 1500, 30);
INSERT INTO EMP VALUES (11,'ADAMS', 'CLERK', 1500, 20);
SQL> SELECT deptno, SUM(sal),
2 RANK() OVER (ORDER BY SUM(sal) DESC) AS rank
3 FROM emp
4 GROUP BY ROLLUP(deptno)
5 ORDER BY deptno;
DEPTNO SUM(SAL) RANK
---------- ---------- ----------
10 5850 4
20 8275 3
30 8450 2
22575 1
SQL>
Home »
Oracle »
Analytical Functions »
Oracle »
Analytical Functions »
RANK:
- RANK
- Place NULLS FIRST in RANK
- Place NULLS LAST in RANK
- Place NULLS LAST in RANK and order by clause
- Get top n rows with rank
- Using the RANK with group by
- RANK() vs DENSE_RANK() Functions
- RANK() and PARTITION BY
- ROLLUP and RANK
- CUBE and RANK
- GROUPING SETS and RANK
Related: