Oracle grouping和rollup简单测试
SQL> select department_id,sum(salary) from employees where department_id in(10,30,90,100) group by department_id order by department_id; DEPARTMENT_ID SUM(SALARY) ------------- ----------- 10 4400 30 24900 90 58000 100 51608 SQL> select department_id,first_name,sum(salary) from employees where department_id in(10,30,90,100) group by (department_id,first_name) order by department_id; DEPARTMENT_ID FIRST_NAME SUM(SALARY) ------------- -------------------- ----------- 10 Jennifer 4400 30 Alexander 3100 30 Den 11000 30 Guy 2600 30 Karen 2500 30 Shelli 2900 30 Sigal 2800 90 Lex 17000 90 Neena 17000 90 Steven 24000 100 Daniel 9000 100 Ismael 7700 100 John 8200 100 Jose Manuel 7800 100 Luis 6900 100 Nancy 12008 16 rows selected SQL> select department_id,first_name,sum(salary) from employees where department_id in(10,30,90,100) group by rollup(department_id,first_name) order by department_id; DEPARTMENT_ID FIRST_NAME SUM(SALARY) ------------- -------------------- ----------- 10 Jennifer 4400 10 4400 30 Alexander 3100 30 Den 11000 30 Guy 2600 30 Karen 2500 30 Shelli 2900 30 Sigal 2800 30 24900 90 Lex 17000 90 Neena 17000 90 Steven 24000 90 58000 100 Daniel 9000 100 Ismael 7700 100 John 8200 100 Jose Manuel 7800 100 Luis 6900 100 Nancy 12008 100 51608 DEPARTMENT_ID FIRST_NAME SUM(SALARY) ------------- -------------------- ----------- 138908 21 rows selected SQL> select department_id,grouping(department_id),first_name,grouping(first_name),sum(salary) from employees where department_id in(10,30,90,100) group by rollup(department_id,first_name) order by department_id; DEPARTMENT_ID GROUPING(DEPARTMENT_ID) FIRST_NAME GROUPING(FIRST_NAME) SUM(SALARY) ------------- ----------------------- -------------------- -------------------- ----------- 10 0 Jennifer 0 4400 10 0 1 4400 30 0 Alexander 0 3100 30 0 Den 0 11000 30 0 Guy 0 2600 30 0 Karen 0 2500 30 0 Shelli 0 2900 30 0 Sigal 0 2800 30 0 1 24900 90 0 Lex 0 17000 90 0 Neena 0 17000 90 0 Steven 0 24000 90 0 1 58000 100 0 Daniel 0 9000 100 0 Ismael 0 7700 100 0 John 0 8200 100 0 Jose Manuel 0 7800 100 0 Luis 0 6900 100 0 Nancy 0 12008 100 0 1 51608 DEPARTMENT_ID GROUPING(DEPARTMENT_ID) FIRST_NAME GROUPING(FIRST_NAME) SUM(SALARY) ------------- ----------------------- -------------------- -------------------- ----------- 1 1 138908 21 rows selected
rollup为按分组统计小计和。
grouping(department_id)和grouping(first_name)
如果当前列所在的行为空,则显示为1,不为空则显示为0;