Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / Query Select
 

Group by case

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> -- 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> insert into emp(emp_no, lastname, firstname, midinit, street, city, state, zip,shortZipCode, area_code, phone, salary, birthdate, startDate,title, dept_no, mgr, region, division, total_sales)valu es   2                      (2,'X','Lucy','J','1 Street','New York','NY','43552','6633','212','234-4444',7.75,'21-mar-1976','1-feb-1994','Sales Manager',2,1,100,10,40000); 1 row created. SQL> insert into emp(emp_no, lastname, firstname, midinit, street, city, state, zip,shortZipCode, area_code, phone, salary, birthdate, startDate,title, dept_no, mgr, region, division, total_sales)valu es   2                      (3,'Y','Jordan','E','1 Drive','New York','NY','76822','8763','212','222-2222',7.75,'14-feb-1963','15-mar-1995','Sales Clerk',2,2,100,10,10000); 1 row created. SQL> SQL> select   2  case when salary between 6 and 10 then 'Salary 06-10'   3       when salary between 11 and 15 then 'Salary 11-15'   4       when salary between 16 and 20 then 'Salary 16-20'   5       when salary between 21 and 25 then 'Salary 21-25'   6       else 'Salary OOR'   7       end   8       AS bucket,   9  count(*) num_emps  10  from emp  11  group by  12  case when salary between 6 and 10 then 'Salary 06-10'  13       when salary between 11 and 15 then 'Salary 11-15'  14       when salary between 16 and 20 then 'Salary 16-20'  15       when salary between 21 and 25 then 'Salary 21-25'  16       else 'Salary OOR'  17       end  18  / BUCKET         NUM_EMPS ------------ ---------- Salary 06-10          2 Salary OOR            1 2 rows selected. SQL> SQL> drop table emp; Table dropped. SQL>