0% found this document useful (0 votes)
38 views20 pages

Enhancements To The GROUP BY Clause: Reserved

Uploaded by

dashingvicky15
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views20 pages

Enhancements To The GROUP BY Clause: Reserved

Uploaded by

dashingvicky15
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 20

17

Enhancements to the
GROUP BY Clause

Copyright © Oracle Corporation, 2001. All rights


Objectives

After completing this lesson, you should be able


to do the following:
• Use the ROLLUP operation to produce
subtotal values
• Use the CUBE operation to produce cross-
tabulation values
• Use the GROUPING function to identify the row
values created by ROLLUP or CUBE
• Use GROUPING SETS to produce a single result set

17-2 Copyright © Oracle Corporation, 2001. All rights


Review of Group Functions

Group functions operate on sets of rows to give one


result per group.

SELECT [column,] group_function(column). . .


FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];

Example:
Example:
SELECT AVG(salary), STDDEV(salary),
COUNT(commission_pct),MAX(hire_date)
FROM employees
WHERE job_id LIKE 'SA%';

17-3 Copyright © Oracle Corporation, 2001. All rights


Review of the GROUP BY Clause

Syntax:
Syntax:
SELECT [column,] group_function(column). . .
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];

Example:
Example:
SELECT department_id, job_id, SUM(salary),
COUNT(employee_id)
FROM employees
GROUP BY department_id, job_id ;

17-4 Copyright © Oracle Corporation, 2001. All rights


Review of the HAVING Clause

SELECT [column,] group_function(column)...


FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING having_expression]
[ORDER BY column];

• Use the HAVING clause to specify which groups


are to be displayed.
• You further restrict the groups on the basis of a
limiting condition.

17-5 Copyright © Oracle Corporation, 2001. All rights


GROUP BY with ROLLUP and
CUBE Operators

• Use ROLLUP or CUBE with GROUP BY to produce


superaggregate rows by cross-referencing
columns.
• ROLLUP grouping produces a results set
containing the regular grouped rows and the
subtotal values.
• CUBE grouping produces a results set containing
the rows from ROLLUP and cross-tabulation rows.

17-6 Copyright © Oracle Corporation, 2001. All rights


ROLLUP Operator

SELECT [column,] group_function(column). . .


FROM table
[WHERE condition]
[GROUP BY [ROLLUP] group_by_expression]
[HAVING having_expression];
[ORDER BY column];

• ROLLUP is an extension to the GROUP BY clause.


• Use the ROLLUP operation to produce cumulative
aggregates, such as subtotals.

17-7 Copyright © Oracle Corporation, 2001. All rights


ROLLUP Operator Example

SELECT department_id, job_id, SUM(salary)


FROM employees
WHERE department_id < 60
GROUP BY ROLLUP(department_id, job_id);

1
2

17-8 Copyright © Oracle Corporation, 2001. All rights


CUBE Operator

SELECT [column,] group_function(column)...


FROM table
[WHERE condition]
[GROUP BY [CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];

• CUBE is an extension to the GROUP BY clause.


• You can use the CUBE operator to produce cross-
tabulation values with a single SELECT statement.

17-9 Copyright © Oracle Corporation, 2001. All rights


CUBE Operator: Example
SELECT department_id, job_id, SUM(salary)
FROM employees
WHERE department_id < 60
GROUP BY CUBE (department_id, job_id) ;

1
2

17-10 Copyright © Oracle Corporation, 2001. All rights


GROUPING Function
SELECT [column,] group_function(column) . ,
GROUPING(expr)
FROM table
[WHERE condition]
[GROUP BY [ROLLUP][CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];

• The GROUPING function can be used with either the


CUBE or ROLLUP operator.
• Using the GROUPING function, you can find the
groups forming the subtotal in a row.
• Using the GROUPING function, you can differentiate
stored NULL values from NULL values created by
ROLLUP or CUBE.
• The GROUPING function returns 0 or 1.
17-11 Copyright © Oracle Corporation, 2001. All rights
GROUPING Function: Example

SELECT department_id DEPTID, job_id JOB,


SUM(salary),
GROUPING(department_id) GRP_DEPT,
GROUPING(job_id) GRP_JOB
FROM employees
WHERE department_id < 50
GROUP BY ROLLUP(department_id, job_id);

1
2

17-12 Copyright © Oracle Corporation, 2001. All rights


GROUPING SETS

• GROUPING SETS are a further extension of the


GROUP BY clause.
• You can use GROUPING SETS to define multiple
groupings in the same query.
• The Oracle Server computes all groupings specified in
the GROUPING SETS clause and combines the results
of individual groupings with a UNION ALL operation.
• Grouping set efficiency:
– Only one pass over the base table is required.
– There is no need to write complex UNION statements.
– The more elements the GROUPING SETS have, the
greater the performance benefit.

17-13 Copyright © Oracle Corporation, 2001. All rights


GROUPING SETS: Example

SELECT department_id, job_id,


manager_id,avg(salary)
FROM employees
GROUP BY GROUPING SETS
((department_id,job_id), (job_id,manager_id));

1

17-15 Copyright © Oracle Corporation, 2001. All rights


Composite Columns

• A composite column is a collection of columns


that are treated as a unit.
ROLLUP (a,(b,c)
(b,c), d)
(b,c)
• To specify composite columns, use the GROUP BY
clause to group columns within parentheses so
that the Oracle server treats them as a unit while
computing ROLLUP or CUBE operations.
• When used with ROLLUP or CUBE, composite
columns would mean skipping aggregation across
certain levels.

17-17 Copyright © Oracle Corporation, 2001. All rights


Composite Columns: Example

SELECT department_id, job_id, manager_id,


SUM(salary)
FROM employees
GROUP BY ROLLUP( department_id,(job_id, manager_id));

2
1


3

17-19 Copyright © Oracle Corporation, 2001. All rights


Concatenated Groupings

• Concatenated groupings offer a concise way to


generate useful combinations of groupings.
• To specify concatenated grouping sets, you
separate multiple grouping sets, ROLLUP, and CUBE
operations with commas so that the Oracle Server
combines them into a single GROUP BY clause.
• The result is a cross-product of groupings from
each grouping set.

GROUP BY GROUPING SETS(a, b), GROUPING SETS(c, d)

17-21 Copyright © Oracle Corporation, 2001. All rights


Concatenated Groupings Example

SELECT department_id, job_id, manager_id,


SUM(salary)
FROM employees
GROUP BY department_id,
ROLLUP(job_id),
CUBE(manager_id);

1

2

3

4

17-22 Copyright © Oracle Corporation, 2001. All rights


Summary
In this lesson, you should have learned how to:
• Use the ROLLUP operation to produce
subtotal values
• Use the CUBE operation to produce cross-tabulation
values
• Use the GROUPING function to identify the row values
created by ROLLUP or CUBE
• Use the GROUPING SETS syntax to define multiple
groupings in the same query
• Use the GROUP BY clause, to combine expressions in
various ways:
– Composite columns
– Concatenated grouping sets

17-23 Copyright © Oracle Corporation, 2001. All rights


Practice 17 Overview

This practice covers the following topics:


• Using the ROLLUP operator
• Using the CUBE operator
• Using the GROUPING function
• Using GROUPING SETS

17-24 Copyright © Oracle Corporation, 2001. All rights

You might also like