0% found this document useful (0 votes)
40 views31 pages

Schedule: Timing Topic: 35 Minutes 40 Minutes Practice 75 Minutes Total

The document discusses how to use group functions in SQL to obtain summary information from groups of rows in a table, including how to group rows using the GROUP BY clause and calculate averages, sums, counts and other aggregate values for each group. It provides examples of using group functions like COUNT, AVG, MIN, MAX with different options like DISTINCT and guidelines for using them with null values. The document also demonstrates how to further subgroup data using multiple columns in the GROUP BY clause.

Uploaded by

Daniiel Obando
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
40 views31 pages

Schedule: Timing Topic: 35 Minutes 40 Minutes Practice 75 Minutes Total

The document discusses how to use group functions in SQL to obtain summary information from groups of rows in a table, including how to group rows using the GROUP BY clause and calculate averages, sums, counts and other aggregate values for each group. It provides examples of using group functions like COUNT, AVG, MIN, MAX with different options like DISTINCT and guidelines for using them with null values. The document also demonstrates how to further subgroup data using multiple columns in the GROUP BY clause.

Uploaded by

Daniiel Obando
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 31

Schedule: Timing Topic

35 minutes Lecture
40 minutes Practice
75 minutes Total
Lesson Aim
This lesson further addresses functions. It focuses on obtaining summary information, such as
averages, for groups of rows. It discusses how to group rows in a table into smaller sets and how to
specify search criteria for groups of rows.

Introduction to Oracle9i: SQL 5-2


Group Functions
Unlike single-row functions, group functions operate on sets of rows to give one result per group.
These sets may be the whole table or the table split into groups.

Introduction to Oracle9i: SQL 5-3


Group Functions (continued)
Each of the functions accepts an argument. The following table identifies the options that you can use
in the syntax:
Function Description
AVG([DISTINCT|ALL]n) Average value of n, ignoring null values
COUNT({*|[DISTINCT|ALL]expr}) Number of rows, where expr evaluates to
something other than null (count all selected rows
using *, including duplicates and rows with nulls)

MAX([DISTINCT|ALL]expr) Maximum value of expr, ignoring null values


MIN([DISTINCT|ALL]expr) Minimum value of expr, ignoring null values
STDDEV([DISTINCT|ALL]x) Standard deviation of n, ignoring null values
SUM([DISTINCT|ALL]n) Sum values of n, ignoring null values
VARIANCE([DISTINCT|ALL]x) Variance of n, ignoring null values

Introduction to Oracle9i: SQL 5-4


Guidelines for Using Group Functions
• DISTINCT makes the function consider only nonduplicate values; ALL makes it consider every
value including duplicates. The default is ALL and therefore does not need to be specified.
• The data types for the functions with an expr argument may be CHAR, VARCHAR2, NUMBER,
or DATE.
• All group functions ignore null values. To substitute a value for null values, use the NVL, NVL2,
or COALESCE functions.
• The Oracle server implicitly sorts the result set in ascending order when using a GROUP BY
clause. To override this default ordering, DESC can be used in an ORDER BY clause.

Instructor Note
Stress the use of DISTINCT and group functions ignoring null values. ALL is the default and is very
rarely specified.

Introduction to Oracle9i: SQL 5-5


Group Functions
You can use AVG, SUM, MIN, and MAX functions against columns that can store numeric data. The
example on the slide displays the average, highest, lowest, and sum of monthly salaries for all sales
representatives.

Introduction to Oracle9i: SQL 5-6


Group Functions (continued)
You can use the MAX and MIN functions for any data type. The slide example displays the most junior
and most senior employee.
The following example displays the employee last name that is first and the employee last name that is
the last in an alphabetized list of all employees.
SELECT MIN(last_name), MAX(last_name)
FROM employees;

Note: AVG, SUM, VARIANCE, and STDDEV functions can be used only with numeric data types.

Introduction to Oracle9i: SQL 5-7


The COUNT Function
The COUNT function has three formats:
• COUNT(*)
• COUNT(expr)
• COUNT(DISTINCT expr)
COUNT(*) returns the number of rows in a table that satisfy the criteria of the SELECT statement,
including duplicate rows and rows containing null values in any of the columns. If a WHERE clause is
included in the SELECT statement, COUNT(*) returns the number of rows that satisfies the condition
in the WHERE clause.
In contrast, COUNT(expr) returns the number of non-null values in the column identified by expr.
COUNT(DISTINCT expr) returns the number of unique, non-null values in the column identified
by expr.
The slide example displays the number of employees in department 50.

Instructor Note
Demo: 5_count1.sql, 5_count2.sql

Introduction to Oracle9i: SQL 5-8


Purpose: To illustrate using the COUNT(*) and COUNT(expr) functions

Introduction to Oracle9i: SQL 5-‹Nº›


The COUNT Function (continued)
The slide example displays the number of employees in department 80 who can earn a commission.
Example
Display the number of department values in the EMPLOYEES table.
SELECT COUNT(department_id)
FROM employees;

Introduction to Oracle9i: SQL 5-9


The DISTINCT Keyword
Use the DISTINCT keyword to suppress the counting of any duplicate values within a column.
The example on the slide displays the number of distinct department values in the EMPLOYEES table.

Introduction to Oracle9i: SQL 5-10


Group Functions and Null Values
All group functions ignore null values in the column. In the slide example, the average is calculated
based only on the rows in the table where a valid value is stored in the COMMISSION_PCT column.
The average is calculated as the total commission paid to all employees divided by the number of
employees receiving a commission (four).

Introduction to Oracle9i: SQL 5-11


Group Functions and Null Values (continued)
The NVL function forces group functions to include null values. In the slide example, the average is
calculated based on all rows in the table, regardless of whether null values are stored in the
COMMISSION_PCT column. The average is calculated as the total commission paid to all employees
divided by the total number of employees in the company (20).

Introduction to Oracle9i: SQL 5-12


Groups of Data
Until now, all group functions have treated the table as one large group of information. At times, you
need to divide the table of information into smaller groups. This can be done by using the GROUP BY
clause.

Introduction to Oracle9i: SQL 5-13


The GROUP BY Clause
You can use the GROUP BY clause to divide the rows in a table into groups. You can then use the
group functions to return summary information for each group.
In the syntax:
group_by_expression specifies columns whose values determine the basis for
grouping rows
Guidelines
• If you include a group function in a SELECT clause, you cannot select individual results as
well, unless the individual column appears in the GROUP BY clause. You receive an error
message if you fail to include the column list in the GROUP BY clause.
• Using a WHERE clause, you can exclude rows before dividing them into groups.
• You must include the columns in the GROUP BY clause.
• You cannot use a column alias in the GROUP BY clause.
• By default, rows are sorted by ascending order of the columns included in the GROUP BY list.
You can override this by using the ORDER BY clause.

Introduction to Oracle9i: SQL 5-14


The GROUP BY Clause (continued)
When using the GROUP BY clause, make sure that all columns in the SELECT list that are not group
functions are included in the GROUP BY clause. The example on the slide displays the department
number and the average salary for each department. Here is how this SELECT statement, containing a
GROUP BY clause, is evaluated:
• The SELECT clause specifies the columns to be retrieved:
– Department number column in the EMPLOYEES table
– The average of all the salaries in the group you specified in the GROUP BY clause
• The FROM clause specifies the tables that the database must access: the EMPLOYEES table.
• The WHERE clause specifies the rows to be retrieved. Since there is no WHERE clause, all rows
are retrieved by default.
• The GROUP BY clause specifies how the rows should be grouped. The rows are being grouped
by department number, so the AVG function that is being applied to the salary column will
calculate the average salary for each department.

Instructor Note
Group results are sorted implicitly, on the grouping column. You can use ORDER BY to specify a
different sort order, remembering to use only group functions, or the grouping column.

Introduction to Oracle9i: SQL 5-15


The GROUP BY Clause (continued)
The GROUP BY column does not have to be in the SELECT clause. For example, the SELECT
statement on the slide displays the average salaries for each department without displaying the
respective department numbers. Without the department numbers, however, the results do not look
meaningful.
You can use the group function in the ORDER BY clause.
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary);

Instructor Note
Demonstrate the query with and without the DEPARTMENT_ID column in the SELECT statement.
Introduction to Oracle9i: SQL 5-16
Groups within Groups
Sometimes you need to see results for groups within groups. The slide shows a report that displays the
total salary being paid to each job title, within each department.
The EMPLOYEES table is grouped first by department number and, within that grouping, by job title.
For example, the four stock clerks in department 50 are grouped together and a single result (total
salary) is produced for all stock clerks within the group.

Instructor Note
Demo: 5_order1.sql, 5_order2.sql
Purpose: To illustrate ordering columns that are grouped by DEPARTMENT_ID first and ordering
columns that are grouped by JOB_ID first.

Introduction to Oracle9i: SQL 5-17


Groups within Groups (continued)
You can return summary results for groups and subgroups by listing more than one GROUP BY
column. You can determine the default sort order of the results by the order of the columns in the
GROUP BY clause. Here is how the SELECT statement on the slide, containing a GROUP BY clause,
is evaluated:
• The SELECT clause specifies the column to be retrieved:
– Department number in the EMPLOYEES table
– Job ID in the EMPLOYEES table
– The sum of all the salaries in the group that you specified in the GROUP BY clause
• The FROM clause specifies the tables that the database must access: the EMPLOYEES table.
• The GROUP BY clause specifies how you must group the rows:
– First, the rows are grouped by department number.
– Second, within the department number groups, the rows are grouped by job ID.
So the SUM function is being applied to the salary column for all job IDs within each department
number group.

Introduction to Oracle9i: SQL 5-18


Illegal Queries Using Group Functions
Whenever you use a mixture of individual items (DEPARTMENT_ID) and group functions (COUNT)
in the same SELECT statement, you must include a GROUP BY clause that specifies the individual
items (in this case, DEPARTMENT_ID). If the GROUP BY clause is missing, then the error message
“not a single-group group function” appears and an asterisk (*) points to the offending column. You
can correct the error on the slide by adding the GROUP BY clause.
SELECT department_id, count(last_name)
FROM employees
GROUP BY department_id;

Any column or expression in the SELECT list that is not an aggregate function must be in the GROUP
BY clause.
Instructor Note
Demo: 5_error.sql

Introduction to Oracle9i: SQL 5-19


Purpose: To illustrate executing a SELECT statement with no GROUP BY clause

Introduction to Oracle9i: SQL 5-‹Nº›


Illegal Queries Using Group Functions (continued)
The WHERE clause cannot be used to restrict groups. The SELECT statement on the slide results in an
error because it uses the WHERE clause to restrict the display of average salaries of those departments
that have an average salary greater than $8,000.
You can correct the slide error by using the HAVING clause to restrict groups.
SELECT department_id, AVG(salary)
FROM employees
HAVING AVG(salary) > 8000
GROUP BY department_id;

Introduction to Oracle9i: SQL 5-20


Restricting Group Results
In the same way that you use the WHERE clause to restrict the rows that you select, you use the
HAVING clause to restrict groups. To find the maximum salary of each department, but show only the
departments that have a maximum salary of more than $10,000, you need to do the following:
1. Find the average salary for each department by grouping by department number.
2. Restrict the groups to those departments with a maximum salary greater than $10,000.

Introduction to Oracle9i: SQL 5-21


The HAVING Clause
You use the HAVING clause to specify which groups are to be displayed, and thus, you further restrict
the groups on the basis of aggregate information.
In the syntax:
group_condition restricts the groups of rows returned to those groups for which
the specified condition is true
The Oracle server performs the following steps when you use the HAVING clause:
1. Rows are grouped.
2. The group function is applied to the group.
3. The groups that match the criteria in the HAVING clause are displayed.
The HAVING clause can precede the GROUP BY clause, but it is recommended that you place the
GROUP BY clause first because that is more logical. Groups are formed and group functions are
calculated before the HAVING clause is applied to the groups in the SELECT list.
Instructor Note
The Oracle server evaluates the clauses in the following order:
• If the statement contains a WHERE clause, the server establishes the candidate rows.
• The server identifies the groups specified in the GROUP BY clause.
• The HAVING clause further restricts result groups that do not meet the group criteria in the

Introduction to Oracle9i: SQL 5-22


HAVING clause.

Introduction to Oracle9i: SQL 5-‹Nº›


The HAVING Clause (continued)
The slide example displays department numbers and maximum salaries for those departments whose
maximum salary is greater than $10,000.
You can use the GROUP BY clause without using a group function in the SELECT list.
If you restrict rows based on the result of a group function, you must have a GROUP BY clause as well
as the HAVING clause.
The following example displays the department numbers and average salaries for those departments
whose maximum salary is greater than $10,000:
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
HAVING max(salary)>10000;

Introduction to Oracle9i: SQL 5-23


The HAVING Clause (continued)
The slide example displays the job ID and total monthly salary for each job with a total payroll
exceeding $13,000. The example excludes sales representatives and sorts the list by the total monthly
salary.

Instructor Note
Demo: 5_job1.sql, 5_job2.sql
Purpose: To illustrate using a WHERE clause to restrict rows by JOB_ID and using a HAVING clause

Introduction to Oracle9i: SQL 5-24


to restrict groups by SUM(SALARY).

Introduction to Oracle9i: SQL 5-‹Nº›


Nesting Group Functions
Group functions can be nested to a depth of two. The slide example displays the maximum average
salary.

Introduction to Oracle9i: SQL 5-25


Summary
Seven group functions are available in SQL:
• AVG
• COUNT
• MAX
• MIN
• SUM
• STDDEV
• VARIANCE
You can create subgroups by using the GROUP BY clause. Groups can be excluded using the HAVING
clause.
Place the HAVING and GROUP BY clauses after the WHERE clause in a statement. Place the ORDER BY
clause last.
The Oracle server evaluates the clauses in the following order:
1. If the statement contains a WHERE clause, the server establishes the candidate rows.
2. The server identifies the groups specified in the GROUP BY clause.
3. The HAVING clause further restricts result groups that do not meet the group criteria in the

Introduction to Oracle9i: SQL 5-26


HAVING clause.

Introduction to Oracle9i: SQL 5-‹Nº›

You might also like