These are the
enhancements to the group by feature.
USING
ROLLUP
This will give the
salaries in each department in each job category along with the total salary for
individual departments and the total salary of all the departments.
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   
ANALYST       6000
        20   
CLERK           1900
        20   
MANAGER     2975
        20                             10875
        30   
CLERK             950
        30   
MANAGER      2850
        30   
SALESMAN     5600
        30                              9400
                                          29025
USING
GROUPING
 In the above query it will give the total
salary of the individual departments but with a blank in the job column and
gives the total salary of all the departments with blanks in deptno and job
columns.
 To replace these blanks with your desired string
grouping will be used
 SQL> select decode(grouping(deptno),1,'AllDepts',deptno),decode(grouping(job),1,'All  jobs',job),sum(sal) from emp group by
rollup(deptno,job);
DECODE(GROUPING(DEPTNO),1,'ALLDEPTS',DEP
DECODE(GR   SUM(SAL)
-----------------------------------  ----------------------------------    --------------
10                                                       
CLERK             1300
10                                                        
MANAGER                 2450
10                                                       
PRESIDENT               5000
10                                                       
All jobs                      
8750
20                                                       
ANALYST                   6000
20                                                       
CLERK                        1900
20                                                       
MANAGER                  2975
20                                                       
All jobs                         10875
30                                                       
CLERK                          950
30                                                       
MANAGER                  2850
30                                                       
SALESMAN                 5600
30                                                       
All jobs                          9400
All Depts                                             All jobs                        29025
   Grouping will return 1 if the column which
is specified in the grouping function has been used in rollup.
Grouping will be used in
association with decode.
USING
CUBE
This will give the
salaries in each department in each job category, the total salary for
individual departments, the total salary of all the departments and the
salaries in each job category.
SQL> select
decode(grouping(deptno),1,’All pts’,deptno),decode(grouping(job),1,’All 
        Jobs’,job),sum(sal) from emp group by
cube(deptno,job);
DECODE(GROUPING(DEPTNO),1,'ALLDEPTS',DEP
DECODE(GR   SUM(SAL)
-----------------------------------  ------------------------------------  ------------
10                                           
CLERK                         1300
10                                            MANAGER                              2450
10                                           
PRESIDENT                          
5000
10                                            All
Jobs                                 
8750
20                                           
ANALYST                              
6000
20                                           
CLERK                         1900
20                                           
MANAGER                             
2975
20                                            All
Jobs                               10875
30                                           
CLERK                           
950
30                                           
MANAGER                           
   2850
30                                           
SALESMAN                            
5600
30                                            All
Jobs                                 
9400
All Depts                                           
ANALYST                               6000
All Depts                                           
CLERK                         4150
All Depts                                           
MANAGER                             
8275
All Depts                                            PRESIDENT                           5000
All Depts                                           
SALESMAN                            
5600
All Depts                                            All
Jobs                               29025
 
 
No comments:
Post a Comment