Você está na página 1de 108

10 MANAGER 2450

10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> select job,deptno,sum(sal) from emp group by rollup(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
CLERK 4150
ANALYST 20 6000
ANALYST 6000
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
MANAGER 8275
SALESMAN 30 5600
SALESMAN 5600
PRESIDENT 10 5000
PRESIDENT 5000
29025

15 rows selected.

SQL> select job,deptno,sum(sal) from emp group by cube(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
29025
10 8750
20 10875
30 9400
CLERK 4150
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
ANALYST 6000
ANALYST 20 6000
MANAGER 8275
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
SALESMAN 5600
SALESMAN 30 5600
PRESIDENT 5000
PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) JOB DEPTNO SUM(SAL)


------------- -------------------- ---------- ----------
1 29025
1 10 8750
1 20 10875
1 30 9400
0 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
0 ANALYST 6000
0 ANALYST 20 6000
0 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
0 SALESMAN 5600
0 SALESMAN 30 5600
0 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno)


SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
1 29025
0 10 8750
0 20 10875
0 30 9400
1 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 ANALYST 6000
0 ANALYST 20 6000
1 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 SALESMAN 5600
0 SALESMAN 30 5600
1 PRESIDENT 5000
0 PRESIDENT 10 5000
18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL>
SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 CLERK 4150
0 ANALYST 20 6000
1 ANALYST 6000
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 MANAGER 8275
0 SALESMAN 30 5600
1 SALESMAN 5600
0 PRESIDENT 10 5000
1 PRESIDENT 5000
1 29025

15 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL> /

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 CLERK 4150
0 0 ANALYST 20 6000
0 1 ANALYST 6000
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 MANAGER 8275
0 0 SALESMAN 30 5600
0 1 SALESMAN 5600
0 0 PRESIDENT 10 5000
0 1 PRESIDENT 5000
1 1 29025

15 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno);


GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)
------------- ---------------- -------------------- ---------- ----------
1 1 29025
1 0 10 8750
1 0 20 10875
1 0 30 9400
0 1 CLERK 4150
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 ANALYST 6000
0 0 ANALYST 20 6000
0 1 MANAGER 8275
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 SALESMAN 5600
0 0 SALESMAN 30 5600
0 1 PRESIDENT 5000
0 0 PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(deptno,job);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
0 1 CLERK 4150
0 1 ANALYST 6000
0 1 MANAGER 8275
0 1 SALESMAN 5600
0 1 PRESIDENT 5000
1 0 10 8750
0 0 CLERK 10 1300
0 0 MANAGER 10 2450
0 0 PRESIDENT 10 5000
1 0 20 10875
0 0 CLERK 20 1900
0 0 ANALYST 20 6000
0 0 MANAGER 20 2975
1 0 30 9400
0 0 CLERK 30 950
0 0 MANAGER 30 2850
0 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),grouping(deptno),job,deptno,sum(sal) from


SQL> /

DECODE(GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


-------------------- ---------------- -------------------- ---------- ----------
all designations 1 29025
CLERK 1 CLERK 4150
ANALYST 1 ANALYST 6000
MANAGER 1 MANAGER 8275
SALESMAN 1 SALESMAN 5600
PRESIDENT 1 PRESIDENT 5000
all designations 0 10 8750
CLERK 0 CLERK 10 1300
MANAGER 0 MANAGER 10 2450
PRESIDENT 0 PRESIDENT 10 5000
all designations 0 20 10875
CLERK 0 CLERK 20 1900
ANALYST 0 ANALYST 20 6000
MANAGER 0 MANAGER 20 2975
all designations 0 30 9400
CLERK 0 CLERK 30 950
MANAGER 0 MANAGER 30 2850
SALESMAN 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),decode(grouping(deptno),1,'ALL DEPARTMENT


SQL> /

DECODE(GROUPING(JOB) DECODE(GROUPING(DEPTNO),1,'ALLDEPARTMENT SUM(SAL)


-------------------- ---------------------------------------- ----------
all designations ALL DEPARTMENTS 29025
CLERK ALL DEPARTMENTS 4150
ANALYST ALL DEPARTMENTS 6000
MANAGER ALL DEPARTMENTS 8275
SALESMAN ALL DEPARTMENTS 5600
PRESIDENT ALL DEPARTMENTS 5000
all designations 10 8750
CLERK 10 1300
MANAGER 10 2450
PRESIDENT 10 5000
all designations 20 10875
CLERK 20 1900
ANALYST 20 6000
MANAGER 20 2975
all designations 30 9400
CLERK 30 950
MANAGER 30 2850
SALESMAN 30 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
SQL> /

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB GPID SUM(SAL)


---------- -------------------- ---------- ----------
3 29025
CLERK 2 4150
ANALYST 2 6000
MANAGER 2 8275
SALESMAN 2 5600
PRESIDENT 2 5000
10 1 8750
10 CLERK 0 1300
10 MANAGER 0 2450
10 PRESIDENT 0 5000
20 1 10875
20 CLERK 0 1900
20 ANALYST 0 6000
20 MANAGER 0 2975
30 1 9400
30 CLERK 0 950
30 MANAGER 0 2850
30 SALESMAN 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB)
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /
WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
*
ERROR at line 3:
ORA-00923: FROM keyword not found where expected

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP SAL 1300
10 MANAGER JDP SAL 2450
10 PRESIDENT JDP SAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP SAL 1900
20 ANALYST JDP SAL 6000
20 MANAGER JDP SAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP SAL 950
30 MANAGER JDP SAL 2850
30 SALESMAN JDP SAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)=3
SQL> /

DEPTNO JOB CASEG SUM(SAL)


---------- -------------------- ----- ----------
TOTAL 29025

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)>=1
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
20 DEPT TOTAL 10875
30 DEPT TOTAL 9400

9 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO,JOB)


SQL> /

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

24 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
29025
CLERK 4150
ANALYST 6000
MANAGER 8275
SALESMAN 5600
PRESIDENT 5000
10 8750
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

15 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
29025

13 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO);


SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)


SQL>
SQL> /

DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

6 rows selected.
SQL> SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE
3
SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /
FROM EMP GROUP BY CUBE(JOB,DEPTNO)
*
ERROR at line 7:
ORA-00905: missing keyword

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 JOBDEPT TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 TOTAL
CLERK 20 1900 TOTAL
CLERK 30 950 TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 TOTAL
MANAGER 20 2975 TOTAL
MANAGER 30 2850 TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 TOTAL

18 rows selected.
SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 DEPTTOTAL
20 10875 DEPTTOTAL
30 9400 DEPTTOTAL
CLERK 4150 JOB TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 JOB TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 JOB TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 JOB TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 JOB TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 FROM EMP GROUP BY CUBE(JOB,DEPTNO)
9* HAVING GROUPING_ID(JOB,DEPTNO)>2
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL

SQL> SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB ORDER BY EMPRANK;
SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB ORDER BY EMPRANK
SQL> /
SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf
1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 CLERK 800 1
30 CLERK 950 2
20 CLERK 1100 3
30 SALESMAN 1250 4
10 CLERK 1300 5
30 SALESMAN 1500 6
30 SALESMAN 1600 7
10 MANAGER 2450 8
30 MANAGER 2850 9
20 MANAGER 2975 10
20 ANALYST 3000 11
10 PRESIDENT 5000 12

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 6
20 MANAGER 2975 6
30 MANAGER 2850 6
10 PRESIDENT 5000 9
30 SALESMAN 1250 10
30 SALESMAN 1500 10
30 SALESMAN 1600 10

12 rows selected.

SQL> SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 3
20 MANAGER 2975 3
30 MANAGER 2850 3
10 PRESIDENT 5000 4
30 SALESMAN 1250 5
30 SALESMAN 1500 5
30 SALESMAN 1600 5

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY JOB)


EMPRANK FROM EMP
2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
10 CLERK 1300 1
20 ANALYST 3000 1
30 CLERK 950 1
10 MANAGER 2450 2
20 CLERK 1100 2
30 MANAGER 2850 2
20 CLERK 800 2
10 PRESIDENT 5000 3
30 SALESMAN 1250 3
30 SALESMAN 1600 3
30 SALESMAN 1500 3
20 MANAGER 2975 3

12 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO


ORDER BY SAL DESC) TOPSA
L FROM EMP)WHERE TOPSAL<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
CLARK 10 2450 2
MILLER 10 1300 3
SCOTT 20 3000 1
FORD 20 3000 1
JONES 20 2975 3
BLAKE 30 2850 1
ALLEN 30 1600 2
TURNER 30 1500 3

9 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO)


TOPSAL FROM EMP)WHERE
TOPSAL<=3;
SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO) TOPSAL
FROM EMP)WHERE TOPSAL
*
ERROR at line 1:
ORA-30485: missing ORDER BY expression in the window specification

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY DEPTNO)TOPSAL


FROM EMP)WHERE TOPSAL
<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
CLARK 10 2450 1
KING 10 5000 1
MILLER 10 1300 1

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL)TOPSAL FROM


EMP)WHERE TOPSAL <=
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
SMITH 20 800 1
JAMES 30 950 2
ADAMS 20 1100 3

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL DESC)TOPSAL


FROM EMP)WHERE TOPS
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
SCOTT 20 3000 2
FORD 20 3000 2

SQL>

SQL>

SQL>

SQL>

SQL> 10 MANAGER 2450


10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> select job,deptno,sum(sal) from emp group by rollup(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
CLERK 4150
ANALYST 20 6000
ANALYST 6000
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
MANAGER 8275
SALESMAN 30 5600
SALESMAN 5600
PRESIDENT 10 5000
PRESIDENT 5000
29025

15 rows selected.

SQL> select job,deptno,sum(sal) from emp group by cube(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
29025
10 8750
20 10875
30 9400
CLERK 4150
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
ANALYST 6000
ANALYST 20 6000
MANAGER 8275
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
SALESMAN 5600
SALESMAN 30 5600
PRESIDENT 5000
PRESIDENT 10 5000

18 rows selected.
SQL> select grouping(job),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) JOB DEPTNO SUM(SAL)


------------- -------------------- ---------- ----------
1 29025
1 10 8750
1 20 10875
1 30 9400
0 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
0 ANALYST 6000
0 ANALYST 20 6000
0 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
0 SALESMAN 5600
0 SALESMAN 30 5600
0 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno)


SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
1 29025
0 10 8750
0 20 10875
0 30 9400
1 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 ANALYST 6000
0 ANALYST 20 6000
1 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 SALESMAN 5600
0 SALESMAN 30 5600
1 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf
1* select grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)
SQL>
SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 CLERK 4150
0 ANALYST 20 6000
1 ANALYST 6000
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 MANAGER 8275
0 SALESMAN 30 5600
1 SALESMAN 5600
0 PRESIDENT 10 5000
1 PRESIDENT 5000
1 29025

15 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL> /

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 CLERK 4150
0 0 ANALYST 20 6000
0 1 ANALYST 6000
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 MANAGER 8275
0 0 SALESMAN 30 5600
0 1 SALESMAN 5600
0 0 PRESIDENT 10 5000
0 1 PRESIDENT 5000
1 1 29025

15 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
1 0 10 8750
1 0 20 10875
1 0 30 9400
0 1 CLERK 4150
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 ANALYST 6000
0 0 ANALYST 20 6000
0 1 MANAGER 8275
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 SALESMAN 5600
0 0 SALESMAN 30 5600
0 1 PRESIDENT 5000
0 0 PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(deptno,job);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
0 1 CLERK 4150
0 1 ANALYST 6000
0 1 MANAGER 8275
0 1 SALESMAN 5600
0 1 PRESIDENT 5000
1 0 10 8750
0 0 CLERK 10 1300
0 0 MANAGER 10 2450
0 0 PRESIDENT 10 5000
1 0 20 10875
0 0 CLERK 20 1900
0 0 ANALYST 20 6000
0 0 MANAGER 20 2975
1 0 30 9400
0 0 CLERK 30 950
0 0 MANAGER 30 2850
0 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),grouping(deptno),job,deptno,sum(sal) from


SQL> /

DECODE(GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


-------------------- ---------------- -------------------- ---------- ----------
all designations 1 29025
CLERK 1 CLERK 4150
ANALYST 1 ANALYST 6000
MANAGER 1 MANAGER 8275
SALESMAN 1 SALESMAN 5600
PRESIDENT 1 PRESIDENT 5000
all designations 0 10 8750
CLERK 0 CLERK 10 1300
MANAGER 0 MANAGER 10 2450
PRESIDENT 0 PRESIDENT 10 5000
all designations 0 20 10875
CLERK 0 CLERK 20 1900
ANALYST 0 ANALYST 20 6000
MANAGER 0 MANAGER 20 2975
all designations 0 30 9400
CLERK 0 CLERK 30 950
MANAGER 0 MANAGER 30 2850
SALESMAN 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),decode(grouping(deptno),1,'ALL DEPARTMENT


SQL> /

DECODE(GROUPING(JOB) DECODE(GROUPING(DEPTNO),1,'ALLDEPARTMENT SUM(SAL)


-------------------- ---------------------------------------- ----------
all designations ALL DEPARTMENTS 29025
CLERK ALL DEPARTMENTS 4150
ANALYST ALL DEPARTMENTS 6000
MANAGER ALL DEPARTMENTS 8275
SALESMAN ALL DEPARTMENTS 5600
PRESIDENT ALL DEPARTMENTS 5000
all designations 10 8750
CLERK 10 1300
MANAGER 10 2450
PRESIDENT 10 5000
all designations 20 10875
CLERK 20 1900
ANALYST 20 6000
MANAGER 20 2975
all designations 30 9400
CLERK 30 950
MANAGER 30 2850
SALESMAN 30 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
SQL> /

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB GPID SUM(SAL)


---------- -------------------- ---------- ----------
3 29025
CLERK 2 4150
ANALYST 2 6000
MANAGER 2 8275
SALESMAN 2 5600
PRESIDENT 2 5000
10 1 8750
10 CLERK 0 1300
10 MANAGER 0 2450
10 PRESIDENT 0 5000
20 1 10875
20 CLERK 0 1900
20 ANALYST 0 6000
20 MANAGER 0 2975
30 1 9400
30 CLERK 0 950
30 MANAGER 0 2850
30 SALESMAN 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB)
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /
WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
*
ERROR at line 3:
ORA-00923: FROM keyword not found where expected

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP SAL 1300
10 MANAGER JDP SAL 2450
10 PRESIDENT JDP SAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP SAL 1900
20 ANALYST JDP SAL 6000
20 MANAGER JDP SAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP SAL 950
30 MANAGER JDP SAL 2850
30 SALESMAN JDP SAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)=3
SQL> /

DEPTNO JOB CASEG SUM(SAL)


---------- -------------------- ----- ----------
TOTAL 29025

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)>=1
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
20 DEPT TOTAL 10875
30 DEPT TOTAL 9400

9 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO,JOB)


SQL> /

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

24 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
29025
CLERK 4150
ANALYST 6000
MANAGER 8275
SALESMAN 5600
PRESIDENT 5000
10 8750
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

15 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
29025

13 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO);


SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)


SQL>
SQL> /

DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

6 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) ,


2 CASE
3
SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /
FROM EMP GROUP BY CUBE(JOB,DEPTNO)
*
ERROR at line 7:
ORA-00905: missing keyword

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 JOBDEPT TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 TOTAL
CLERK 20 1900 TOTAL
CLERK 30 950 TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 TOTAL
MANAGER 20 2975 TOTAL
MANAGER 30 2850 TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 DEPTTOTAL
20 10875 DEPTTOTAL
30 9400 DEPTTOTAL
CLERK 4150 JOB TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 JOB TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 JOB TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 JOB TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 JOB TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 FROM EMP GROUP BY CUBE(JOB,DEPTNO)
9* HAVING GROUPING_ID(JOB,DEPTNO)>2
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL

SQL> SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB ORDER BY EMPRANK;
SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB ORDER BY EMPRANK
SQL> /
SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /
DEPTNO JOB SAL EMPRANK
---------- -------------------- ---------- ----------
20 CLERK 800 1
30 CLERK 950 2
20 CLERK 1100 3
30 SALESMAN 1250 4
10 CLERK 1300 5
30 SALESMAN 1500 6
30 SALESMAN 1600 7
10 MANAGER 2450 8
30 MANAGER 2850 9
20 MANAGER 2975 10
20 ANALYST 3000 11
10 PRESIDENT 5000 12

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 6
20 MANAGER 2975 6
30 MANAGER 2850 6
10 PRESIDENT 5000 9
30 SALESMAN 1250 10
30 SALESMAN 1500 10
30 SALESMAN 1600 10

12 rows selected.

SQL> SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 3
20 MANAGER 2975 3
30 MANAGER 2850 3
10 PRESIDENT 5000 4
30 SALESMAN 1250 5
30 SALESMAN 1500 5
30 SALESMAN 1600 5

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY JOB)


EMPRANK FROM EMP
2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
10 CLERK 1300 1
20 ANALYST 3000 1
30 CLERK 950 1
10 MANAGER 2450 2
20 CLERK 1100 2
30 MANAGER 2850 2
20 CLERK 800 2
10 PRESIDENT 5000 3
30 SALESMAN 1250 3
30 SALESMAN 1600 3
30 SALESMAN 1500 3
20 MANAGER 2975 3

12 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO


ORDER BY SAL DESC) TOPSA
L FROM EMP)WHERE TOPSAL<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
CLARK 10 2450 2
MILLER 10 1300 3
SCOTT 20 3000 1
FORD 20 3000 1
JONES 20 2975 3
BLAKE 30 2850 1
ALLEN 30 1600 2
TURNER 30 1500 3

9 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO)


TOPSAL FROM EMP)WHERE
TOPSAL<=3;
SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO) TOPSAL
FROM EMP)WHERE TOPSAL
*
ERROR at line 1:
ORA-30485: missing ORDER BY expression in the window specification

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY DEPTNO)TOPSAL


FROM EMP)WHERE TOPSAL
<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
CLARK 10 2450 1
KING 10 5000 1
MILLER 10 1300 1

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL)TOPSAL FROM


EMP)WHERE TOPSAL <=
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
SMITH 20 800 1
JAMES 30 950 2
ADAMS 20 1100 3

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL DESC)TOPSAL


FROM EMP)WHERE TOPS
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
SCOTT 20 3000 2
FORD 20 3000 2

SQL>

SQL>

SQL>

SQL>

SQL> 10 MANAGER 2450


10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> select job,deptno,sum(sal) from emp group by rollup(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
CLERK 4150
ANALYST 20 6000
ANALYST 6000
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
MANAGER 8275
SALESMAN 30 5600
SALESMAN 5600
PRESIDENT 10 5000
PRESIDENT 5000
29025

15 rows selected.

SQL> select job,deptno,sum(sal) from emp group by cube(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
29025
10 8750
20 10875
30 9400
CLERK 4150
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
ANALYST 6000
ANALYST 20 6000
MANAGER 8275
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
SALESMAN 5600
SALESMAN 30 5600
PRESIDENT 5000
PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) JOB DEPTNO SUM(SAL)


------------- -------------------- ---------- ----------
1 29025
1 10 8750
1 20 10875
1 30 9400
0 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
0 ANALYST 6000
0 ANALYST 20 6000
0 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
0 SALESMAN 5600
0 SALESMAN 30 5600
0 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno)


SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
1 29025
0 10 8750
0 20 10875
0 30 9400
1 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 ANALYST 6000
0 ANALYST 20 6000
1 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 SALESMAN 5600
0 SALESMAN 30 5600
1 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL>
SQL> /
GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)
---------------- -------------------- ---------- ----------
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 CLERK 4150
0 ANALYST 20 6000
1 ANALYST 6000
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 MANAGER 8275
0 SALESMAN 30 5600
1 SALESMAN 5600
0 PRESIDENT 10 5000
1 PRESIDENT 5000
1 29025

15 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL> /

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 CLERK 4150
0 0 ANALYST 20 6000
0 1 ANALYST 6000
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 MANAGER 8275
0 0 SALESMAN 30 5600
0 1 SALESMAN 5600
0 0 PRESIDENT 10 5000
0 1 PRESIDENT 5000
1 1 29025

15 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
1 0 10 8750
1 0 20 10875
1 0 30 9400
0 1 CLERK 4150
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 ANALYST 6000
0 0 ANALYST 20 6000
0 1 MANAGER 8275
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 SALESMAN 5600
0 0 SALESMAN 30 5600
0 1 PRESIDENT 5000
0 0 PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(deptno,job);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
0 1 CLERK 4150
0 1 ANALYST 6000
0 1 MANAGER 8275
0 1 SALESMAN 5600
0 1 PRESIDENT 5000
1 0 10 8750
0 0 CLERK 10 1300
0 0 MANAGER 10 2450
0 0 PRESIDENT 10 5000
1 0 20 10875
0 0 CLERK 20 1900
0 0 ANALYST 20 6000
0 0 MANAGER 20 2975
1 0 30 9400
0 0 CLERK 30 950
0 0 MANAGER 30 2850
0 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),grouping(deptno),job,deptno,sum(sal) from


SQL> /

DECODE(GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


-------------------- ---------------- -------------------- ---------- ----------
all designations 1 29025
CLERK 1 CLERK 4150
ANALYST 1 ANALYST 6000
MANAGER 1 MANAGER 8275
SALESMAN 1 SALESMAN 5600
PRESIDENT 1 PRESIDENT 5000
all designations 0 10 8750
CLERK 0 CLERK 10 1300
MANAGER 0 MANAGER 10 2450
PRESIDENT 0 PRESIDENT 10 5000
all designations 0 20 10875
CLERK 0 CLERK 20 1900
ANALYST 0 ANALYST 20 6000
MANAGER 0 MANAGER 20 2975
all designations 0 30 9400
CLERK 0 CLERK 30 950
MANAGER 0 MANAGER 30 2850
SALESMAN 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),decode(grouping(deptno),1,'ALL DEPARTMENT


SQL> /

DECODE(GROUPING(JOB) DECODE(GROUPING(DEPTNO),1,'ALLDEPARTMENT SUM(SAL)


-------------------- ---------------------------------------- ----------
all designations ALL DEPARTMENTS 29025
CLERK ALL DEPARTMENTS 4150
ANALYST ALL DEPARTMENTS 6000
MANAGER ALL DEPARTMENTS 8275
SALESMAN ALL DEPARTMENTS 5600
PRESIDENT ALL DEPARTMENTS 5000
all designations 10 8750
CLERK 10 1300
MANAGER 10 2450
PRESIDENT 10 5000
all designations 20 10875
CLERK 20 1900
ANALYST 20 6000
MANAGER 20 2975
all designations 30 9400
CLERK 30 950
MANAGER 30 2850
SALESMAN 30 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
SQL> /

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB GPID SUM(SAL)


---------- -------------------- ---------- ----------
3 29025
CLERK 2 4150
ANALYST 2 6000
MANAGER 2 8275
SALESMAN 2 5600
PRESIDENT 2 5000
10 1 8750
10 CLERK 0 1300
10 MANAGER 0 2450
10 PRESIDENT 0 5000
20 1 10875
20 CLERK 0 1900
20 ANALYST 0 6000
20 MANAGER 0 2975
30 1 9400
30 CLERK 0 950
30 MANAGER 0 2850
30 SALESMAN 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB)
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /
WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
*
ERROR at line 3:
ORA-00923: FROM keyword not found where expected

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /
DEPTNO JOB CASEWHENGROUP SUM(SAL)
---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP SAL 1300
10 MANAGER JDP SAL 2450
10 PRESIDENT JDP SAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP SAL 1900
20 ANALYST JDP SAL 6000
20 MANAGER JDP SAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP SAL 950
30 MANAGER JDP SAL 2850
30 SALESMAN JDP SAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)=3
SQL> /
DEPTNO JOB CASEG SUM(SAL)
---------- -------------------- ----- ----------
TOTAL 29025

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)>=1
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
20 DEPT TOTAL 10875
30 DEPT TOTAL 9400

9 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO,JOB)


SQL> /

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

24 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
29025
CLERK 4150
ANALYST 6000
MANAGER 8275
SALESMAN 5600
PRESIDENT 5000
10 8750
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400
15 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
29025

13 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO);


SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)


SQL>
SQL> /

DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

6 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) ,


2 CASE
3
SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /
FROM EMP GROUP BY CUBE(JOB,DEPTNO)
*
ERROR at line 7:
ORA-00905: missing keyword

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 JOBDEPT TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 TOTAL
CLERK 20 1900 TOTAL
CLERK 30 950 TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 TOTAL
MANAGER 20 2975 TOTAL
MANAGER 30 2850 TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 DEPTTOTAL
20 10875 DEPTTOTAL
30 9400 DEPTTOTAL
CLERK 4150 JOB TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 JOB TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 JOB TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 JOB TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 JOB TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 FROM EMP GROUP BY CUBE(JOB,DEPTNO)
9* HAVING GROUPING_ID(JOB,DEPTNO)>2
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL

SQL> SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB ORDER BY EMPRANK;
SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB ORDER BY EMPRANK
SQL> /
SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 CLERK 800 1
30 CLERK 950 2
20 CLERK 1100 3
30 SALESMAN 1250 4
10 CLERK 1300 5
30 SALESMAN 1500 6
30 SALESMAN 1600 7
10 MANAGER 2450 8
30 MANAGER 2850 9
20 MANAGER 2975 10
20 ANALYST 3000 11
10 PRESIDENT 5000 12

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 6
20 MANAGER 2975 6
30 MANAGER 2850 6
10 PRESIDENT 5000 9
30 SALESMAN 1250 10
30 SALESMAN 1500 10
30 SALESMAN 1600 10

12 rows selected.

SQL> SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 3
20 MANAGER 2975 3
30 MANAGER 2850 3
10 PRESIDENT 5000 4
30 SALESMAN 1250 5
30 SALESMAN 1500 5
30 SALESMAN 1600 5
12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY JOB)


EMPRANK FROM EMP
2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
10 CLERK 1300 1
20 ANALYST 3000 1
30 CLERK 950 1
10 MANAGER 2450 2
20 CLERK 1100 2
30 MANAGER 2850 2
20 CLERK 800 2
10 PRESIDENT 5000 3
30 SALESMAN 1250 3
30 SALESMAN 1600 3
30 SALESMAN 1500 3
20 MANAGER 2975 3

12 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO


ORDER BY SAL DESC) TOPSA
L FROM EMP)WHERE TOPSAL<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
CLARK 10 2450 2
MILLER 10 1300 3
SCOTT 20 3000 1
FORD 20 3000 1
JONES 20 2975 3
BLAKE 30 2850 1
ALLEN 30 1600 2
TURNER 30 1500 3

9 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO)


TOPSAL FROM EMP)WHERE
TOPSAL<=3;
SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO) TOPSAL
FROM EMP)WHERE TOPSAL
*
ERROR at line 1:
ORA-30485: missing ORDER BY expression in the window specification
SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY DEPTNO)TOPSAL
FROM EMP)WHERE TOPSAL
<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
CLARK 10 2450 1
KING 10 5000 1
MILLER 10 1300 1

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL)TOPSAL FROM


EMP)WHERE TOPSAL <=
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
SMITH 20 800 1
JAMES 30 950 2
ADAMS 20 1100 3

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL DESC)TOPSAL


FROM EMP)WHERE TOPS
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
SCOTT 20 3000 2
FORD 20 3000 2

SQL>

SQL>

SQL>

SQL>

SQL> 10 MANAGER 2450


10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.
SQL> select job,deptno,sum(sal) from emp group by rollup(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
CLERK 4150
ANALYST 20 6000
ANALYST 6000
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
MANAGER 8275
SALESMAN 30 5600
SALESMAN 5600
PRESIDENT 10 5000
PRESIDENT 5000
29025

15 rows selected.

SQL> select job,deptno,sum(sal) from emp group by cube(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
29025
10 8750
20 10875
30 9400
CLERK 4150
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
ANALYST 6000
ANALYST 20 6000
MANAGER 8275
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
SALESMAN 5600
SALESMAN 30 5600
PRESIDENT 5000
PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) JOB DEPTNO SUM(SAL)


------------- -------------------- ---------- ----------
1 29025
1 10 8750
1 20 10875
1 30 9400
0 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
0 ANALYST 6000
0 ANALYST 20 6000
0 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
0 SALESMAN 5600
0 SALESMAN 30 5600
0 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno)


SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
1 29025
0 10 8750
0 20 10875
0 30 9400
1 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 ANALYST 6000
0 ANALYST 20 6000
1 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 SALESMAN 5600
0 SALESMAN 30 5600
1 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL>
SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 CLERK 4150
0 ANALYST 20 6000
1 ANALYST 6000
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 MANAGER 8275
0 SALESMAN 30 5600
1 SALESMAN 5600
0 PRESIDENT 10 5000
1 PRESIDENT 5000
1 29025

15 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL> /

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 CLERK 4150
0 0 ANALYST 20 6000
0 1 ANALYST 6000
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 MANAGER 8275
0 0 SALESMAN 30 5600
0 1 SALESMAN 5600
0 0 PRESIDENT 10 5000
0 1 PRESIDENT 5000
1 1 29025

15 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
1 0 10 8750
1 0 20 10875
1 0 30 9400
0 1 CLERK 4150
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 ANALYST 6000
0 0 ANALYST 20 6000
0 1 MANAGER 8275
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 SALESMAN 5600
0 0 SALESMAN 30 5600
0 1 PRESIDENT 5000
0 0 PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(deptno,job);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
0 1 CLERK 4150
0 1 ANALYST 6000
0 1 MANAGER 8275
0 1 SALESMAN 5600
0 1 PRESIDENT 5000
1 0 10 8750
0 0 CLERK 10 1300
0 0 MANAGER 10 2450
0 0 PRESIDENT 10 5000
1 0 20 10875
0 0 CLERK 20 1900
0 0 ANALYST 20 6000
0 0 MANAGER 20 2975
1 0 30 9400
0 0 CLERK 30 950
0 0 MANAGER 30 2850
0 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),grouping(deptno),job,deptno,sum(sal) from


SQL> /

DECODE(GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


-------------------- ---------------- -------------------- ---------- ----------
all designations 1 29025
CLERK 1 CLERK 4150
ANALYST 1 ANALYST 6000
MANAGER 1 MANAGER 8275
SALESMAN 1 SALESMAN 5600
PRESIDENT 1 PRESIDENT 5000
all designations 0 10 8750
CLERK 0 CLERK 10 1300
MANAGER 0 MANAGER 10 2450
PRESIDENT 0 PRESIDENT 10 5000
all designations 0 20 10875
CLERK 0 CLERK 20 1900
ANALYST 0 ANALYST 20 6000
MANAGER 0 MANAGER 20 2975
all designations 0 30 9400
CLERK 0 CLERK 30 950
MANAGER 0 MANAGER 30 2850
SALESMAN 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),decode(grouping(deptno),1,'ALL DEPARTMENT


SQL> /

DECODE(GROUPING(JOB) DECODE(GROUPING(DEPTNO),1,'ALLDEPARTMENT SUM(SAL)


-------------------- ---------------------------------------- ----------
all designations ALL DEPARTMENTS 29025
CLERK ALL DEPARTMENTS 4150
ANALYST ALL DEPARTMENTS 6000
MANAGER ALL DEPARTMENTS 8275
SALESMAN ALL DEPARTMENTS 5600
PRESIDENT ALL DEPARTMENTS 5000
all designations 10 8750
CLERK 10 1300
MANAGER 10 2450
PRESIDENT 10 5000
all designations 20 10875
CLERK 20 1900
ANALYST 20 6000
MANAGER 20 2975
all designations 30 9400
CLERK 30 950
MANAGER 30 2850
SALESMAN 30 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
SQL> /

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB GPID SUM(SAL)


---------- -------------------- ---------- ----------
3 29025
CLERK 2 4150
ANALYST 2 6000
MANAGER 2 8275
SALESMAN 2 5600
PRESIDENT 2 5000
10 1 8750
10 CLERK 0 1300
10 MANAGER 0 2450
10 PRESIDENT 0 5000
20 1 10875
20 CLERK 0 1900
20 ANALYST 0 6000
20 MANAGER 0 2975
30 1 9400
30 CLERK 0 950
30 MANAGER 0 2850
30 SALESMAN 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB)
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /
WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
*
ERROR at line 3:
ORA-00923: FROM keyword not found where expected

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP SAL 1300
10 MANAGER JDP SAL 2450
10 PRESIDENT JDP SAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP SAL 1900
20 ANALYST JDP SAL 6000
20 MANAGER JDP SAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP SAL 950
30 MANAGER JDP SAL 2850
30 SALESMAN JDP SAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.
SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)=3
SQL> /

DEPTNO JOB CASEG SUM(SAL)


---------- -------------------- ----- ----------
TOTAL 29025
SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)>=1
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
20 DEPT TOTAL 10875
30 DEPT TOTAL 9400

9 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO,JOB)


SQL> /

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

24 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
29025
CLERK 4150
ANALYST 6000
MANAGER 8275
SALESMAN 5600
PRESIDENT 5000
10 8750
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

15 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO,JOB);


DEPTNO JOB SUM(SAL)
---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
29025

13 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO);


SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)


SQL>
SQL> /

DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

6 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) ,


2 CASE
3
SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /
FROM EMP GROUP BY CUBE(JOB,DEPTNO)
*
ERROR at line 7:
ORA-00905: missing keyword

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 JOBDEPT TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 TOTAL
CLERK 20 1900 TOTAL
CLERK 30 950 TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 TOTAL
MANAGER 20 2975 TOTAL
MANAGER 30 2850 TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /
JOB DEPTNO SUM(SAL) CASEGROUPING_
-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 DEPTTOTAL
20 10875 DEPTTOTAL
30 9400 DEPTTOTAL
CLERK 4150 JOB TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 JOB TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 JOB TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 JOB TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 JOB TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 FROM EMP GROUP BY CUBE(JOB,DEPTNO)
9* HAVING GROUPING_ID(JOB,DEPTNO)>2
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL

SQL> SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB ORDER BY EMPRANK;
SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB ORDER BY EMPRANK
SQL> /
SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 CLERK 800 1
30 CLERK 950 2
20 CLERK 1100 3
30 SALESMAN 1250 4
10 CLERK 1300 5
30 SALESMAN 1500 6
30 SALESMAN 1600 7
10 MANAGER 2450 8
30 MANAGER 2850 9
20 MANAGER 2975 10
20 ANALYST 3000 11
10 PRESIDENT 5000 12

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 6
20 MANAGER 2975 6
30 MANAGER 2850 6
10 PRESIDENT 5000 9
30 SALESMAN 1250 10
30 SALESMAN 1500 10
30 SALESMAN 1600 10

12 rows selected.

SQL> SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 3
20 MANAGER 2975 3
30 MANAGER 2850 3
10 PRESIDENT 5000 4
30 SALESMAN 1250 5
30 SALESMAN 1500 5
30 SALESMAN 1600 5

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY JOB)


EMPRANK FROM EMP
2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
10 CLERK 1300 1
20 ANALYST 3000 1
30 CLERK 950 1
10 MANAGER 2450 2
20 CLERK 1100 2
30 MANAGER 2850 2
20 CLERK 800 2
10 PRESIDENT 5000 3
30 SALESMAN 1250 3
30 SALESMAN 1600 3
30 SALESMAN 1500 3
20 MANAGER 2975 3

12 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO


ORDER BY SAL DESC) TOPSA
L FROM EMP)WHERE TOPSAL<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
CLARK 10 2450 2
MILLER 10 1300 3
SCOTT 20 3000 1
FORD 20 3000 1
JONES 20 2975 3
BLAKE 30 2850 1
ALLEN 30 1600 2
TURNER 30 1500 3

9 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO)


TOPSAL FROM EMP)WHERE
TOPSAL<=3;
SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO) TOPSAL
FROM EMP)WHERE TOPSAL
*
ERROR at line 1:
ORA-30485: missing ORDER BY expression in the window specification

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY DEPTNO)TOPSAL


FROM EMP)WHERE TOPSAL
<=3;
ENAME DEPTNO SAL TOPSAL
-------------------- ---------- ---------- ----------
CLARK 10 2450 1
KING 10 5000 1
MILLER 10 1300 1

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL)TOPSAL FROM


EMP)WHERE TOPSAL <=
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
SMITH 20 800 1
JAMES 30 950 2
ADAMS 20 1100 3

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL DESC)TOPSAL


FROM EMP)WHERE TOPS
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
SCOTT 20 3000 2
FORD 20 3000 2

SQL>

SQL>

SQL>

SQL>

SQL> 10 MANAGER 2450


10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> select job,deptno,sum(sal) from emp group by rollup(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
CLERK 4150
ANALYST 20 6000
ANALYST 6000
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
MANAGER 8275
SALESMAN 30 5600
SALESMAN 5600
PRESIDENT 10 5000
PRESIDENT 5000
29025

15 rows selected.

SQL> select job,deptno,sum(sal) from emp group by cube(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
29025
10 8750
20 10875
30 9400
CLERK 4150
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
ANALYST 6000
ANALYST 20 6000
MANAGER 8275
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
SALESMAN 5600
SALESMAN 30 5600
PRESIDENT 5000
PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) JOB DEPTNO SUM(SAL)


------------- -------------------- ---------- ----------
1 29025
1 10 8750
1 20 10875
1 30 9400
0 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
0 ANALYST 6000
0 ANALYST 20 6000
0 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
0 SALESMAN 5600
0 SALESMAN 30 5600
0 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno)


SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
1 29025
0 10 8750
0 20 10875
0 30 9400
1 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 ANALYST 6000
0 ANALYST 20 6000
1 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 SALESMAN 5600
0 SALESMAN 30 5600
1 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL>
SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 CLERK 4150
0 ANALYST 20 6000
1 ANALYST 6000
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 MANAGER 8275
0 SALESMAN 30 5600
1 SALESMAN 5600
0 PRESIDENT 10 5000
1 PRESIDENT 5000
1 29025

15 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL> /

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 CLERK 4150
0 0 ANALYST 20 6000
0 1 ANALYST 6000
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 MANAGER 8275
0 0 SALESMAN 30 5600
0 1 SALESMAN 5600
0 0 PRESIDENT 10 5000
0 1 PRESIDENT 5000
1 1 29025

15 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
1 0 10 8750
1 0 20 10875
1 0 30 9400
0 1 CLERK 4150
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 ANALYST 6000
0 0 ANALYST 20 6000
0 1 MANAGER 8275
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 SALESMAN 5600
0 0 SALESMAN 30 5600
0 1 PRESIDENT 5000
0 0 PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(deptno,job);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
0 1 CLERK 4150
0 1 ANALYST 6000
0 1 MANAGER 8275
0 1 SALESMAN 5600
0 1 PRESIDENT 5000
1 0 10 8750
0 0 CLERK 10 1300
0 0 MANAGER 10 2450
0 0 PRESIDENT 10 5000
1 0 20 10875
0 0 CLERK 20 1900
0 0 ANALYST 20 6000
0 0 MANAGER 20 2975
1 0 30 9400
0 0 CLERK 30 950
0 0 MANAGER 30 2850
0 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),grouping(deptno),job,deptno,sum(sal) from


SQL> /

DECODE(GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


-------------------- ---------------- -------------------- ---------- ----------
all designations 1 29025
CLERK 1 CLERK 4150
ANALYST 1 ANALYST 6000
MANAGER 1 MANAGER 8275
SALESMAN 1 SALESMAN 5600
PRESIDENT 1 PRESIDENT 5000
all designations 0 10 8750
CLERK 0 CLERK 10 1300
MANAGER 0 MANAGER 10 2450
PRESIDENT 0 PRESIDENT 10 5000
all designations 0 20 10875
CLERK 0 CLERK 20 1900
ANALYST 0 ANALYST 20 6000
MANAGER 0 MANAGER 20 2975
all designations 0 30 9400
CLERK 0 CLERK 30 950
MANAGER 0 MANAGER 30 2850
SALESMAN 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),decode(grouping(deptno),1,'ALL DEPARTMENT


SQL> /

DECODE(GROUPING(JOB) DECODE(GROUPING(DEPTNO),1,'ALLDEPARTMENT SUM(SAL)


-------------------- ---------------------------------------- ----------
all designations ALL DEPARTMENTS 29025
CLERK ALL DEPARTMENTS 4150
ANALYST ALL DEPARTMENTS 6000
MANAGER ALL DEPARTMENTS 8275
SALESMAN ALL DEPARTMENTS 5600
PRESIDENT ALL DEPARTMENTS 5000
all designations 10 8750
CLERK 10 1300
MANAGER 10 2450
PRESIDENT 10 5000
all designations 20 10875
CLERK 20 1900
ANALYST 20 6000
MANAGER 20 2975
all designations 30 9400
CLERK 30 950
MANAGER 30 2850
SALESMAN 30 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
SQL> /

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB GPID SUM(SAL)


---------- -------------------- ---------- ----------
3 29025
CLERK 2 4150
ANALYST 2 6000
MANAGER 2 8275
SALESMAN 2 5600
PRESIDENT 2 5000
10 1 8750
10 CLERK 0 1300
10 MANAGER 0 2450
10 PRESIDENT 0 5000
20 1 10875
20 CLERK 0 1900
20 ANALYST 0 6000
20 MANAGER 0 2975
30 1 9400
30 CLERK 0 950
30 MANAGER 0 2850
30 SALESMAN 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB)
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /
WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
*
ERROR at line 3:
ORA-00923: FROM keyword not found where expected

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP SAL 1300
10 MANAGER JDP SAL 2450
10 PRESIDENT JDP SAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP SAL 1900
20 ANALYST JDP SAL 6000
20 MANAGER JDP SAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP SAL 950
30 MANAGER JDP SAL 2850
30 SALESMAN JDP SAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)=3
SQL> /

DEPTNO JOB CASEG SUM(SAL)


---------- -------------------- ----- ----------
TOTAL 29025

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)>=1
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
20 DEPT TOTAL 10875
30 DEPT TOTAL 9400

9 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO,JOB)


SQL> /

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

24 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
29025
CLERK 4150
ANALYST 6000
MANAGER 8275
SALESMAN 5600
PRESIDENT 5000
10 8750
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

15 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
29025

13 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO);


SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)


SQL>
SQL> /

DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

6 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) ,


2 CASE
3
SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /
FROM EMP GROUP BY CUBE(JOB,DEPTNO)
*
ERROR at line 7:
ORA-00905: missing keyword

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 JOBDEPT TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 TOTAL
CLERK 20 1900 TOTAL
CLERK 30 950 TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 TOTAL
MANAGER 20 2975 TOTAL
MANAGER 30 2850 TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 DEPTTOTAL
20 10875 DEPTTOTAL
30 9400 DEPTTOTAL
CLERK 4150 JOB TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 JOB TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 JOB TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 JOB TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 JOB TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.
SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 FROM EMP GROUP BY CUBE(JOB,DEPTNO)
9* HAVING GROUPING_ID(JOB,DEPTNO)>2
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL

SQL> SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB ORDER BY EMPRANK;
SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB ORDER BY EMPRANK
SQL> /
SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 CLERK 800 1
30 CLERK 950 2
20 CLERK 1100 3
30 SALESMAN 1250 4
10 CLERK 1300 5
30 SALESMAN 1500 6
30 SALESMAN 1600 7
10 MANAGER 2450 8
30 MANAGER 2850 9
20 MANAGER 2975 10
20 ANALYST 3000 11
10 PRESIDENT 5000 12

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 6
20 MANAGER 2975 6
30 MANAGER 2850 6
10 PRESIDENT 5000 9
30 SALESMAN 1250 10
30 SALESMAN 1500 10
30 SALESMAN 1600 10

12 rows selected.

SQL> SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 3
20 MANAGER 2975 3
30 MANAGER 2850 3
10 PRESIDENT 5000 4
30 SALESMAN 1250 5
30 SALESMAN 1500 5
30 SALESMAN 1600 5

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY JOB)


EMPRANK FROM EMP
2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
10 CLERK 1300 1
20 ANALYST 3000 1
30 CLERK 950 1
10 MANAGER 2450 2
20 CLERK 1100 2
30 MANAGER 2850 2
20 CLERK 800 2
10 PRESIDENT 5000 3
30 SALESMAN 1250 3
30 SALESMAN 1600 3
30 SALESMAN 1500 3
20 MANAGER 2975 3

12 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO


ORDER BY SAL DESC) TOPSA
L FROM EMP)WHERE TOPSAL<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
CLARK 10 2450 2
MILLER 10 1300 3
SCOTT 20 3000 1
FORD 20 3000 1
JONES 20 2975 3
BLAKE 30 2850 1
ALLEN 30 1600 2
TURNER 30 1500 3

9 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO)


TOPSAL FROM EMP)WHERE
TOPSAL<=3;
SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO) TOPSAL
FROM EMP)WHERE TOPSAL
*
ERROR at line 1:
ORA-30485: missing ORDER BY expression in the window specification

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY DEPTNO)TOPSAL


FROM EMP)WHERE TOPSAL
<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
CLARK 10 2450 1
KING 10 5000 1
MILLER 10 1300 1

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL)TOPSAL FROM


EMP)WHERE TOPSAL <=
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
SMITH 20 800 1
JAMES 30 950 2
ADAMS 20 1100 3

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL DESC)TOPSAL


FROM EMP)WHERE TOPS
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
SCOTT 20 3000 2
FORD 20 3000 2

SQL>

SQL>

SQL>

SQL>

SQL> 10 MANAGER 2450


10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> select job,deptno,sum(sal) from emp group by rollup(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
CLERK 4150
ANALYST 20 6000
ANALYST 6000
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
MANAGER 8275
SALESMAN 30 5600
SALESMAN 5600
PRESIDENT 10 5000
PRESIDENT 5000
29025

15 rows selected.

SQL> select job,deptno,sum(sal) from emp group by cube(job,deptno);

JOB DEPTNO SUM(SAL)


-------------------- ---------- ----------
29025
10 8750
20 10875
30 9400
CLERK 4150
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
ANALYST 6000
ANALYST 20 6000
MANAGER 8275
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
SALESMAN 5600
SALESMAN 30 5600
PRESIDENT 5000
PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) JOB DEPTNO SUM(SAL)


------------- -------------------- ---------- ----------
1 29025
1 10 8750
1 20 10875
1 30 9400
0 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
0 ANALYST 6000
0 ANALYST 20 6000
0 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
0 SALESMAN 5600
0 SALESMAN 30 5600
0 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno)


SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
1 29025
0 10 8750
0 20 10875
0 30 9400
1 CLERK 4150
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 ANALYST 6000
0 ANALYST 20 6000
1 MANAGER 8275
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 SALESMAN 5600
0 SALESMAN 30 5600
1 PRESIDENT 5000
0 PRESIDENT 10 5000

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL>
SQL> /

GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


---------------- -------------------- ---------- ----------
0 CLERK 10 1300
0 CLERK 20 1900
0 CLERK 30 950
1 CLERK 4150
0 ANALYST 20 6000
1 ANALYST 6000
0 MANAGER 10 2450
0 MANAGER 20 2975
0 MANAGER 30 2850
1 MANAGER 8275
0 SALESMAN 30 5600
1 SALESMAN 5600
0 PRESIDENT 10 5000
1 PRESIDENT 5000
1 29025

15 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by rollup(job,deptno)


SQL> /

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 CLERK 4150
0 0 ANALYST 20 6000
0 1 ANALYST 6000
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 MANAGER 8275
0 0 SALESMAN 30 5600
0 1 SALESMAN 5600
0 0 PRESIDENT 10 5000
0 1 PRESIDENT 5000
1 1 29025

15 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(job,deptno);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
1 0 10 8750
1 0 20 10875
1 0 30 9400
0 1 CLERK 4150
0 0 CLERK 10 1300
0 0 CLERK 20 1900
0 0 CLERK 30 950
0 1 ANALYST 6000
0 0 ANALYST 20 6000
0 1 MANAGER 8275
0 0 MANAGER 10 2450
0 0 MANAGER 20 2975
0 0 MANAGER 30 2850
0 1 SALESMAN 5600
0 0 SALESMAN 30 5600
0 1 PRESIDENT 5000
0 0 PRESIDENT 10 5000

18 rows selected.

SQL> select grouping(job),grouping(deptno),job,deptno,sum(sal) from emp group by cube(deptno,job);

GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


------------- ---------------- -------------------- ---------- ----------
1 1 29025
0 1 CLERK 4150
0 1 ANALYST 6000
0 1 MANAGER 8275
0 1 SALESMAN 5600
0 1 PRESIDENT 5000
1 0 10 8750
0 0 CLERK 10 1300
0 0 MANAGER 10 2450
0 0 PRESIDENT 10 5000
1 0 20 10875
0 0 CLERK 20 1900
0 0 ANALYST 20 6000
0 0 MANAGER 20 2975
1 0 30 9400
0 0 CLERK 30 950
0 0 MANAGER 30 2850
0 0 SALESMAN 30 5600

18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),grouping(deptno),job,deptno,sum(sal) from


SQL> /

DECODE(GROUPING(JOB) GROUPING(DEPTNO) JOB DEPTNO SUM(SAL)


-------------------- ---------------- -------------------- ---------- ----------
all designations 1 29025
CLERK 1 CLERK 4150
ANALYST 1 ANALYST 6000
MANAGER 1 MANAGER 8275
SALESMAN 1 SALESMAN 5600
PRESIDENT 1 PRESIDENT 5000
all designations 0 10 8750
CLERK 0 CLERK 10 1300
MANAGER 0 MANAGER 10 2450
PRESIDENT 0 PRESIDENT 10 5000
all designations 0 20 10875
CLERK 0 CLERK 20 1900
ANALYST 0 ANALYST 20 6000
MANAGER 0 MANAGER 20 2975
all designations 0 30 9400
CLERK 0 CLERK 30 950
MANAGER 0 MANAGER 30 2850
SALESMAN 0 SALESMAN 30 5600
18 rows selected.

SQL> ed
Wrote file afiedt.buf

1* select decode(grouping(job),1,'all designations',job),decode(grouping(deptno),1,'ALL DEPARTMENT


SQL> /

DECODE(GROUPING(JOB) DECODE(GROUPING(DEPTNO),1,'ALLDEPARTMENT SUM(SAL)


-------------------- ---------------------------------------- ----------
all designations ALL DEPARTMENTS 29025
CLERK ALL DEPARTMENTS 4150
ANALYST ALL DEPARTMENTS 6000
MANAGER ALL DEPARTMENTS 8275
SALESMAN ALL DEPARTMENTS 5600
PRESIDENT ALL DEPARTMENTS 5000
all designations 10 8750
CLERK 10 1300
MANAGER 10 2450
PRESIDENT 10 5000
all designations 20 10875
CLERK 20 1900
ANALYST 20 6000
MANAGER 20 2975
all designations 30 9400
CLERK 30 950
MANAGER 30 2850
SALESMAN 30 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600
18 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,GROUPING(DEPTNO) GDPT,GROUPING(JOB)


GJOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL
SQL> /

DEPTNO JOB GDPT GJOB GPID SUM(SAL)


---------- -------------------- ---------- ---------- ---------- ----------
1 1 3 29025
CLERK 1 0 2 4150
ANALYST 1 0 2 6000
MANAGER 1 0 2 8275
SALESMAN 1 0 2 5600
PRESIDENT 1 0 2 5000
10 0 1 1 8750
10 CLERK 0 0 0 1300
10 MANAGER 0 0 0 2450
10 PRESIDENT 0 0 0 5000
20 0 1 1 10875
20 CLERK 0 0 0 1900
20 ANALYST 0 0 0 6000
20 MANAGER 0 0 0 2975
30 0 1 1 9400
30 CLERK 0 0 0 950
30 MANAGER 0 0 0 2850
30 SALESMAN 0 0 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB GPID SUM(SAL)


---------- -------------------- ---------- ----------
3 29025
CLERK 2 4150
ANALYST 2 6000
MANAGER 2 8275
SALESMAN 2 5600
PRESIDENT 2 5000
10 1 8750
10 CLERK 0 1300
10 MANAGER 0 2450
10 PRESIDENT 0 5000
20 1 10875
20 CLERK 0 1900
20 ANALYST 0 6000
20 MANAGER 0 2975
30 1 9400
30 CLERK 0 950
30 MANAGER 0 2850
30 SALESMAN 0 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB) GPID,SUM(SAL)


2* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,GROUPING_ID(DEPTNO,JOB)
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /
WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
*
ERROR at line 3:
ORA-00923: FROM keyword not found where expected

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP SAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP SAL 1300
10 MANAGER JDP SAL 2450
10 PRESIDENT JDP SAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP SAL 1900
20 ANALYST JDP SAL 6000
20 MANAGER JDP SAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP SAL 950
30 MANAGER JDP SAL 2850
30 SALESMAN JDP SAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE
3 WHEN GROUPING_ID(DEPTNO,JOB)=3 THEN 'TOTAL'
4 WHEN GROUPING_ID(DEPTNO,JOB)=2 THEN 'JOB TOTAL'
5 WHEN GROUPING_ID(DEPTNO,JOB)=1 THEN 'DEPT TOTAL'
6 WHEN GROUPING_ID(DEPTNO,JOB)=0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEWHENGROUP SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9* FROM EMP GROUP BY CUBE(DEPTNO,JOB)
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
10 CLERK JDP TOTAL 1300
10 MANAGER JDP TOTAL 2450
10 PRESIDENT JDP TOTAL 5000
20 DEPT TOTAL 10875
20 CLERK JDP TOTAL 1900
20 ANALYST JDP TOTAL 6000
20 MANAGER JDP TOTAL 2975
30 DEPT TOTAL 9400
30 CLERK JDP TOTAL 950
30 MANAGER JDP TOTAL 2850
30 SALESMAN JDP TOTAL 5600

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)=3
SQL> /

DEPTNO JOB CASEG SUM(SAL)


---------- -------------------- ----- ----------
TOTAL 29025

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,
2 CASE GROUPING_ID(DEPTNO,JOB)
3 WHEN 3 THEN 'TOTAL'
4 WHEN 2 THEN 'JOB TOTAL'
5 WHEN 1 THEN 'DEPT TOTAL'
6 WHEN 0 THEN 'JDP TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 ,SUM(SAL)
9 FROM EMP GROUP BY CUBE(DEPTNO,JOB)
10* HAVING GROUPING_ID(DEPTNO,JOB)>=1
SQL> /

DEPTNO JOB CASEGROUPING_ SUM(SAL)


---------- -------------------- ------------- ----------
TOTAL 29025
CLERK JOB TOTAL 4150
ANALYST JOB TOTAL 6000
MANAGER JOB TOTAL 8275
SALESMAN JOB TOTAL 5600
PRESIDENT JOB TOTAL 5000
10 DEPT TOTAL 8750
20 DEPT TOTAL 10875
30 DEPT TOTAL 9400

9 rows selected.

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO,JOB)


SQL> /

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

24 rows selected.
SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY CUBE(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
29025
CLERK 4150
ANALYST 6000
MANAGER 8275
SALESMAN 5600
PRESIDENT 5000
10 8750
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 10875
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

18 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY DEPTNO,ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

15 rows selected.

SQL> SELECT DEPTNO,JOB,SUM(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO,JOB);

DEPTNO JOB SUM(SAL)


---------- -------------------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
29025

13 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO);


SELECT JOB,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1* SELECT DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO,CUBE(DEPTNO)


SQL>
SQL> /

DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
10 8750
20 10875
30 9400

6 rows selected.

SQL> SELECT JOB,DEPTNO,SUM(SAL) ,


2 CASE
3
SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /
FROM EMP GROUP BY CUBE(JOB,DEPTNO)
*
ERROR at line 7:
ORA-00905: missing keyword
SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'JOBDEPT TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 JOBDEPT TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 TOTAL
CLERK 20 1900 TOTAL
CLERK 30 950 TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 TOTAL
MANAGER 20 2975 TOTAL
MANAGER 30 2850 TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'DEPT TOTAL'
5 WHEN 2 THEN 'JOB TOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 JOB TOTAL
20 10875 JOB TOTAL
30 9400 JOB TOTAL
CLERK 4150 DEPT TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 DEPT TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 DEPT TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 DEPT TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 DEPT TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8* FROM EMP GROUP BY CUBE(JOB,DEPTNO)
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL
10 8750 DEPTTOTAL
20 10875 DEPTTOTAL
30 9400 DEPTTOTAL
CLERK 4150 JOB TOTAL
CLERK 10 1300 JOBDEPT TOTAL
CLERK 20 1900 JOBDEPT TOTAL
CLERK 30 950 JOBDEPT TOTAL
ANALYST 6000 JOB TOTAL
ANALYST 20 6000 JOBDEPT TOTAL
MANAGER 8275 JOB TOTAL
MANAGER 10 2450 JOBDEPT TOTAL
MANAGER 20 2975 JOBDEPT TOTAL
MANAGER 30 2850 JOBDEPT TOTAL
SALESMAN 5600 JOB TOTAL
SALESMAN 30 5600 JOBDEPT TOTAL
PRESIDENT 5000 JOB TOTAL
PRESIDENT 10 5000 JOBDEPT TOTAL

18 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT JOB,DEPTNO,SUM(SAL) ,
2 CASE GROUPING_ID(JOB,DEPTNO)
3 WHEN 0 THEN 'JOBDEPT TOTAL'
4 WHEN 1 THEN 'JOB TOTAL'
5 WHEN 2 THEN 'DEPTTOTAL'
6 WHEN 3 THEN 'TOTAL'
7 ELSE 'NOT SPECIFIED' END
8 FROM EMP GROUP BY CUBE(JOB,DEPTNO)
9* HAVING GROUPING_ID(JOB,DEPTNO)>2
SQL> /

JOB DEPTNO SUM(SAL) CASEGROUPING_


-------------------- ---------- ---------- -------------
29025 TOTAL

SQL> SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB ORDER BY EMPRANK;
SELECT DEPTNO,JOB,SUM(SAL),RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB ORDER BY EMPRANK
SQL> /
SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY SAL) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 CLERK 800 1
30 CLERK 950 2
20 CLERK 1100 3
30 SALESMAN 1250 4
10 CLERK 1300 5
30 SALESMAN 1500 6
30 SALESMAN 1600 7
10 MANAGER 2450 8
30 MANAGER 2850 9
20 MANAGER 2975 10
20 ANALYST 3000 11
10 PRESIDENT 5000 12
12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
SQL> /

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 6
20 MANAGER 2975 6
30 MANAGER 2850 6
10 PRESIDENT 5000 9
30 SALESMAN 1250 10
30 SALESMAN 1500 10
30 SALESMAN 1600 10

12 rows selected.

SQL> SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(ORDER BY JOB) EMPRANK FROM EMP


2 GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
20 ANALYST 3000 1
10 CLERK 1300 2
20 CLERK 800 2
20 CLERK 1100 2
30 CLERK 950 2
10 MANAGER 2450 3
20 MANAGER 2975 3
30 MANAGER 2850 3
10 PRESIDENT 5000 4
30 SALESMAN 1250 5
30 SALESMAN 1500 5
30 SALESMAN 1600 5

12 rows selected.

SQL> ED
Wrote file afiedt.buf

1 SELECT DEPTNO,JOB,SAL,DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY JOB)


EMPRANK FROM EMP
2* GROUP BY DEPTNO,JOB,SAL ORDER BY EMPRANK
3 ;

DEPTNO JOB SAL EMPRANK


---------- -------------------- ---------- ----------
10 CLERK 1300 1
20 ANALYST 3000 1
30 CLERK 950 1
10 MANAGER 2450 2
20 CLERK 1100 2
30 MANAGER 2850 2
20 CLERK 800 2
10 PRESIDENT 5000 3
30 SALESMAN 1250 3
30 SALESMAN 1600 3
30 SALESMAN 1500 3
20 MANAGER 2975 3

12 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO


ORDER BY SAL DESC) TOPSA
L FROM EMP)WHERE TOPSAL<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
CLARK 10 2450 2
MILLER 10 1300 3
SCOTT 20 3000 1
FORD 20 3000 1
JONES 20 2975 3
BLAKE 30 2850 1
ALLEN 30 1600 2
TURNER 30 1500 3

9 rows selected.

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO)


TOPSAL FROM EMP)WHERE
TOPSAL<=3;
SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(PARTITION BY DEPTNO) TOPSAL
FROM EMP)WHERE TOPSAL
*
ERROR at line 1:
ORA-30485: missing ORDER BY expression in the window specification

SQL> SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY DEPTNO)TOPSAL


FROM EMP)WHERE TOPSAL
<=3;

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
CLARK 10 2450 1
KING 10 5000 1
MILLER 10 1300 1

SQL> ED
Wrote file afiedt.buf
1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL)TOPSAL FROM
EMP)WHERE TOPSAL <=
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
SMITH 20 800 1
JAMES 30 950 2
ADAMS 20 1100 3

SQL> ED
Wrote file afiedt.buf

1* SELECT * FROM (SELECT ENAME,DEPTNO,SAL,RANK() OVER(ORDER BY SAL DESC)TOPSAL


FROM EMP)WHERE TOPS
SQL> /

ENAME DEPTNO SAL TOPSAL


-------------------- ---------- ---------- ----------
KING 10 5000 1
SCOTT 20 3000 2
FORD 20 3000 2

SQL>

SQL>

SQL>

SQL>

SQL>

Você também pode gostar