Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / Conversion Functions
 

DECODE in the GROUP BY clause

SQL> SQL> create table emp(   2           emp_no                 integer         primary key   3          ,lastname               varchar2(20)    not null   4          ,firstname              varchar2(15)    not null   5          ,midinit                varchar2(1)   6          ,street                 varchar2(30)   7          ,city                   varchar2(20)   8          ,state                  varchar2(2)   9          ,zip                    varchar2(5)  10          ,shortZipCode           varchar2(4)  11          ,area_code              varchar2(3)  12          ,phone                  varchar2(8)  13          ,salary                 number(5,2)  14          ,birthdate              date  15          ,startDate              date  16          ,title                  varchar2(20)  17          ,dept_no                integer  18          ,mgr                    integer  19          ,region                 number  20          ,division               number  21          ,total_sales            number  22  ); Table created. SQL> SQL> -- emp Table Inserts: SQL> insert into emp(emp_no, lastname, firstname, midinit, street, city, state, zip,shortZipCode, area_code, phone, birthdate, title)values   2                      (1,'Z','Joy','R','1 Ave','New York','NY','12122','2333','212','200-1111','12-nov-1976','President'); 1 row created. SQL> SQL> create or replace view avg_Sal   2  as select trunc(avg(salary)) avg_sal   3  from emp   4  / View created. SQL> SQL> select   2  decode(  sign( (salary - avg_sal ) ),   3       1, '> Average of ' || to_char(avg_sal, '99.99') ,   4       0, '= Average of ' || to_char(avg_sal, '99.99'),   5          -1, '< Average of ' || to_char(avg_sal, '99.99')  ) sal_desc,   6   count(*)   7  from emp, avg_sal   8  group by   9  decode(  sign( (salary - avg_sal ) ),  10       1, '> Average of ' || to_char(avg_sal, '99.99') ,  11       0, '= Average of ' || to_char(avg_sal, '99.99'),  12          -1, '< Average of ' || to_char(avg_sal, '99.99')  )  13  /                              1 1 row selected. SQL> SQL> drop table emp; Table dropped.