You are on page 1of 26

5

Aggregating Data
Using Group Functions

Copyright

Oracle Corporation, 1998. All rights reserved.

Objectives
After completing this lesson, you should
be able to do the following:
Identify the available group functions
Describe the use of group functions
Group data using the GROUP BY clause
Include or exclude grouped rows by
using the HAVING clause

5-2

Copyright

Oracle Corporation, 1998. All rights reserved.

What Are Group Functions?


Group functions operate on sets of rows to give
one result per group.
EMP
DEPTNO
SAL
--------- --------10
2450
10
5000
10
1300
20
800
20
1100
20
3000
20
3000
20
2975
30
1600
30
2850
30
1250
30
950
30
1500
30
1250
5-3

Copyright

maximum
salary in
the EMP table

Oracle Corporation, 1998. All rights reserved.

MAX(SAL)
--------5000

Types of Group Functions


AVG
COUNT
MAX
MIN
STDDEV
SUM
VARIANCE
5-4

Copyright

Oracle Corporation, 1998. All rights reserved.

Using Group Functions

SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY

5-5

[column,] group_function(column)
table
condition]
column]
column];

Copyright

Oracle Corporation, 1998. All rights reserved.

Using AVG and SUM Functions


You can use AVG and SUM for numeric data.
SQL> SELECT
2
3 FROM
4 WHERE

AVG(sal), MAX(sal),
MIN(sal), SUM(sal)
emp
job LIKE 'SALES%';

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)


-------- --------- --------- --------1400
1600
1250
5600

5-6

Copyright

Oracle Corporation, 1998. All rights reserved.

Using MIN and MAX Functions


You can use MIN and MAX for any datatype.
SQL> SELECT
2 FROM

MIN(hiredate), MAX(hiredate)
emp;

MIN(HIRED MAX(HIRED
--------- --------17-DEC-80 12-JAN-83

5-7

Copyright

Oracle Corporation, 1998. All rights reserved.

Using the COUNT Function


COUNT(*) returns the number of rows in a
table.
SQL> SELECT
2 FROM
3 WHERE

COUNT(*)
emp
deptno = 30;

COUNT(*)
--------6

5-8

Copyright

Oracle Corporation, 1998. All rights reserved.

Using the COUNT Function


COUNT(expr) returns the number of
nonnull rows.
SQL> SELECT
2 FROM
3 WHERE

COUNT(comm)
emp
deptno = 30;

COUNT(COMM)
----------4

5-9

Copyright

Oracle Corporation, 1998. All rights reserved.

Group Functions and Null Values


Group functions ignore null values in the
column.
SQL> SELECT AVG(comm)
2 FROM
emp;

AVG(COMM)
--------550

5-10

Copyright

Oracle Corporation, 1998. All rights reserved.

Using the NVL Function


with Group Functions
The NVL function forces group functions
to include null values.
SQL> SELECT AVG(NVL(comm,0))
2 FROM
emp;

AVG(NVL(COMM,0))
---------------157.14286

5-11

Copyright

Oracle Corporation, 1998. All rights reserved.

Creating Groups of Data


EMP
DEPTNO
SAL
--------- --------10
2450
10
5000
10
1300
20
800
20
1100
20
3000
20
3000
20
2975
30
1600
30
2850
30
1250
30
950
30
1500
30
1250
5-12

Copyright

2916.6667

DEPTNO AVG(SAL)
average
salary
------- --------in EMP
2175
10 2916.6667
table
20
2175
for each
30 1566.6667
department
1566.6667

Oracle Corporation, 1998. All rights reserved.

Creating Groups of Data:


GROUP BY Clause
SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY

column, group_function(column)
table
condition]
group_by_expression]
column];

Divide rows in a table into smaller groups


by using the GROUP BY clause.

5-13

Copyright

Oracle Corporation, 1998. All rights reserved.

Using the GROUP BY Clause


All columns in the SELECT list that are not
in group functions must be in the GROUP
BY clause.
SQL> SELECT
deptno, AVG(sal)
2 FROM
emp
3 GROUP BY deptno;

DEPTNO AVG(SAL)
--------- --------10 2916.6667
20
2175
30 1566.6667
5-14

Copyright

Oracle Corporation, 1998. All rights reserved.

Using the GROUP BY Clause


The GROUP BY column does not have to be
in the SELECT list.
SQL> SELECT
AVG(sal)
2 FROM
emp
3 GROUP BY deptno;

AVG(SAL)
--------2916.6667
2175
1566.6667

5-15

Copyright

Oracle Corporation, 1998. All rights reserved.

EMP
DEPTNO
--------10
10
10
20
20
20
20
20
30
30
30
30
30
30
5-16

Grouping by More
Than One Column
JOB
SAL
--------- --------MANAGER
2450
PRESIDENT
5000
CLERK
1300
CLERK
800
CLERK
1100
ANALYST
3000
ANALYST
3000
MANAGER
2975
SALESMAN
1600
MANAGER
2850
SALESMAN
1250
CLERK
950
SALESMAN
1500
SALESMAN
1250
Copyright

sum salaries in
the EMP table
for each job,
grouped by
department

DEPTNO
-------10
10
10
20
20
20
30
30
30

Oracle Corporation, 1998. All rights reserved.

JOB
SUM(SAL)
--------- --------CLERK
1300
MANAGER
2450
PRESIDENT
5000
ANALYST
6000
CLERK
1900
MANAGER
2975
CLERK
950
MANAGER
2850
SALESMAN
5600

Using the GROUP BY Clause


on Multiple Columns
SQL> SELECT
deptno, job, sum(sal)
2 FROM
emp
3 GROUP BY deptno, job;

DEPTNO JOB
SUM(SAL)
--------- --------- --------10 CLERK
1300
10 MANAGER
2450
10 PRESIDENT
5000
20 ANALYST
6000
20 CLERK
1900
...
9 rows selected.
5-17

Copyright

Oracle Corporation, 1998. All rights reserved.

Illegal Queries
Using Group Functions
Any column or expression in the SELECT
list that is not an aggregate function must
be in the GROUP BY clause.
SQL>
SQL>
22

SELECT
SELECT
FROM
FROM

deptno,
deptno, COUNT(ename)
COUNT(ename)
se
u
a
l
c
emp;
Y
B
emp;
ROUP

eG
h
t
n
i
g
n
i
iss
m
n
m
u
l
o
C

SELECT
SELECT deptno,
deptno, COUNT(ename)
COUNT(ename)
**
ERROR
ERROR at
at line
line 1:
1:
ORA-00937:
ORA-00937: not
not aa single-group
single-group group
group function
function
5-18

Copyright

Oracle Corporation, 1998. All rights reserved.

Illegal Queries
Using Group Functions
You cannot use the WHERE clause to restrict
groups.
You use the HAVING clause to restrict groups.
SQL>
SQL>
22
33
44

SELECT
SELECT
FROM
FROM
WHERE
WHERE
GROUP
GROUP BY
BY

deptno,
deptno, AVG(sal)
AVG(sal)
emp
emp
AVG(sal)
AVG(sal) >> 2000
2000
deptno;
deptno;

se
u
cl a

RE s
E
H up
W
o
e
r
h
g
t ct
e
WHERE
AVG(sal)
>
2000
i
s
WHERE AVG(sal) > 2000 u
r
t
es
**
ot
r
n
n
to
ERROR
ERROR at
at line
line 3:
3:Ca

ORA-00934:
ORA-00934: group
group function
function is
is not
not allowed
allowed here
here
5-19

Copyright

Oracle Corporation, 1998. All rights reserved.

Excluding Group Results


EMP
DEPTNO
SAL
--------- --------10
2450
10
5000
10
1300
20
800
20
1100
20
3000
20
3000
20
2975
30
1600
30
2850
30
1250
30
950
30
1500
30
1250

5-20

Copyright

5000

3000

maximum
salary
per department
greater than
$2900

DEPTNO MAX(SAL)
--------- --------10
5000
20
3000

2850

Oracle Corporation, 1998. All rights reserved.

Excluding Group Results:


HAVING Clause
Use the HAVING clause to restrict groups
Rows are grouped.
The group function is applied.
Groups matching the HAVING clause

are displayed.
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
5-21

column, group_function
table
condition]
group_by_expression]
group_condition]
column];
Copyright

Oracle Corporation, 1998. All rights reserved.

Using the HAVING Clause


SQL>
2
3
4

SELECT
FROM
GROUP BY
HAVING

deptno, max(sal)
emp
deptno
max(sal)>2900;

DEPTNO MAX(SAL)
--------- --------10
5000
20
3000

5-22

Copyright

Oracle Corporation, 1998. All rights reserved.

Using the HAVING Clause


SQL>
2
3
4
5
6

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

job, SUM(sal) PAYROLL


emp
job NOT LIKE 'SALES%'
job
SUM(sal)>5000
SUM(sal);

JOB
PAYROLL
--------- --------ANALYST
6000
MANAGER
8275

5-23

Copyright

Oracle Corporation, 1998. All rights reserved.

Nesting Group Functions


Display the maximum average salary.
SQL> SELECT
max(avg(sal))
2 FROM
emp
3 GROUP BY deptno;
MAX(AVG(SAL))
------------2916.6667

5-24

Copyright

Oracle Corporation, 1998. All rights reserved.

Summary
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

column, group_function(column)
table
condition]
group_by_expression]
group_condition]
column];

Order of evaluation of the clauses:


WHERE clause
GROUP BY clause
HAVING clause
5-25

Copyright

Oracle Corporation, 1998. All rights reserved.

Practice Overview
Showing different queries that use group functions
Grouping by rows to achieve more than one result
Excluding groups by using the HAVING clause

5-26

Copyright

Oracle Corporation, 1998. All rights reserved.

You might also like