You are on page 1of 26

5

Aggregating Data
Using Group Functions

Copyright  Oracle Corporation, 1998. All rights reserved.


Objectives

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

5-2 Copyright  Oracle Corporation, 1998. All rights reserved.


What Are Group Functions?
Group
Group functions
functions operate
operate on
on sets
sets of
of rows
rows to
to give
give
one
one result
result per
per group.
group.
EMP
DEPTNO SAL
--------- ---------
10 2450
10 5000
10 1300
20 800
20 1100
20 3000 “maximum MAX(SAL)
20 3000 salary in ---------
20 2975 the EMP table” 5000
30 1600
30 2850
30 1250
30 950
30 1500
30 1250
5-3 Copyright  Oracle Corporation, 1998. All rights reserved.
Types of Group Functions

•• AVG
AVG
•• COUNT
COUNT
•• MAX
MAX
•• MIN
MIN
•• STDDEV
STDDEV
•• SUM
SUM
•• VARIANCE
VARIANCE

5-4 Copyright  Oracle Corporation, 1998. All rights reserved.


Using Group Functions

SELECT [column,] group_function(column)


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

5-5 Copyright  Oracle Corporation, 1998. All rights reserved.


Using AVG and SUM Functions
You
You can
can use
use AVG
AVG and
and SUM
SUM for
for numeric
numeric data.
data.
SQL> SELECT AVG(sal), MAX(sal),
2 MIN(sal), SUM(sal)
3 FROM emp
4 WHERE 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
You can
can use
use MIN
MIN and
and MAX
MAX for
for any
any datatype.
datatype.
SQL> SELECT MIN(hiredate), MAX(hiredate)
2 FROM 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(*)
COUNT(*) returns
returns the
the number
number of
of rows
rows in
in aa
table.
table.
SQL> SELECT COUNT(*)
2 FROM emp
3 WHERE deptno = 30;

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

5-8 Copyright  Oracle Corporation, 1998. All rights reserved.


Using the COUNT Function
COUNT(
COUNT(expr
expr)) returns
returns the
the number
number of
of nonn
nonn
ull
ull rows.
rows.
SQL> SELECT COUNT(comm)
2 FROM emp
3 WHERE deptno = 30;

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

5-9 Copyright  Oracle Corporation, 1998. All rights reserved.


Group Functions and Null Values
Group
Group functions
functions ignore
ignore null
null values
values in
in the
the
column.
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
The NVL
NVL function
function forces
forces group
group functions
functions
to
to include
include null
null values.
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 2916.6667
10 1300
20 800 “average DEPTNO AVG(SAL)
20 1100 salary
------- ---------
20 3000 2175 in EMP
20 3000 table 10 2916.6667
20 2975 for each 20 2175
30 1600 department” 30 1566.6667
30 2850
30 1250 1566.6667
30 950
30 1500
30 1250

5-12 Copyright  Oracle Corporation, 1998. All rights reserved.


Creating Groups of Data:
GROUP BY Clause

SELECT column, group_function(column)


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

Divide
Divide rows
rows in
in aa table
table into
into smaller
smaller groups
groups
by
by using
using the
the GROUP
GROUP BY BY clause.
clause.

5-13 Copyright  Oracle Corporation, 1998. All rights reserved.


Using the GROUP BY Clause
All
All columns
columns in
in the
the SELECT
SELECT list
list that
that are
are not
not
in
in group
group functions
functions must
must be
be in
in the
the GROUP
GROUP
BY
BY clause.
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
The GROUP
GROUP BYBY column
column does
does not
not have
have to
to
be
be in
in the
the SELECT
SELECT list.
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.


Grouping by More
EMP
Than One Column
DEPTNO JOB SAL
--------- --------- ---------
10 MANAGER 2450
DEPTNO JOB SUM(SAL)
10 PRESIDENT 5000
-------- --------- ---------
10 CLERK 1300
10 CLERK 1300
20 CLERK 800 “sum salaries in 10 MANAGER 2450
20 CLERK 1100 the EMP table
10 PRESIDENT 5000
20 ANALYST 3000 for each job,
20 ANALYST 6000
20 ANALYST 3000 grouped by
20 CLERK 1900
20 MANAGER 2975 department”
20 MANAGER 2975
30 SALESMAN 1600
30 CLERK 950
30 MANAGER 2850
30 MANAGER 2850
30 SALESMAN 1250
30 SALESMAN 5600
30 CLERK 950
30 SALESMAN 1500
30 SALESMAN 1250

5-16 Copyright  Oracle Corporation, 1998. All rights reserved.


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
Any column
column oror expression
expression in
in the
the SELECT
SELECT
list
list that
that is
is not
not an
an aggregate
aggregate function
function must
must
be
be inin the
the GROUP
GROUP BYBY clause.
clause.

SQL>
SQL> SELECT
SELECT deptno,
deptno, COUNT(ename)
COUNT(ename)
BYY c
cllaau
u ssee
22 FROM
FROM emp;
emp;
n t
t RO
h
h OUUPPB
GR O
ee G
m i
iissssinn g
g i
i n
o l u
u m
mnn m
Col
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
You cannot
cannot use
use the
the WHERE
WHERE clause
clause to
to restrict
restrict
groups.
groups.
•• You
You use
use the
the HAVING
HAVING clause
clause to
to restrict
restrict groups.
groups.
SQL>
SQL> SELECT
SELECT deptno,
deptno, AVG(sal)
AVG(sal)
s
see
22 FROM
FROM emp
emp l u
aau
33 WHERE AVG(sal)
AVG(sal) >> 2000 c
c l
WHERE 2000
R EE
R ss
44 GROUP
GROUP BY
BY deptno;
deptno; HEE
H uupp
e W
W r oo
h e
tth ctt g g r
WHERE AVG(sal) > 2000 s
see r
r iic
WHERE AVG(sal) > 2000 u u
tt reess t
t
** n
noo r
ann t
t o
o
ERROR
ERROR at
at line
line 3:Ca
3:C
ORA-00934: group function is not allowed here
ORA-00934: group function is not allowed here

5-19 Copyright  Oracle Corporation, 1998. All rights reserved.


Excluding Group Results
EMP
DEPTNO SAL
--------- ---------
10 2450
10 5000 5000
10 1300
20 800
20 1100 “maximum DEPTNO MAX(SAL)
20 3000 salary --------- ---------
3000 per department
20 3000 10 5000
20 2975 greater than 20 3000
30 1600 $2900”
30 2850
30 1250
30 950
2850
30 1500
30 1250

5-20 Copyright  Oracle Corporation, 1998. All rights reserved.


Excluding Group Results:
HAVING Clause
Use
Use the
the HAVING
HAVING clause
clause to
to restrict
restrict groups
groups
–– Rows
Rows are
are grouped.
grouped.
–– The
The group
group function
function is
is applied.
applied.
–– Groups
Groups matching
matching the
the HAVING
HAVING clause
clause
are
are displayed.
displayed.
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
5-21 Copyright  Oracle Corporation, 1998. All rights reserved.
Using the HAVING Clause

SQL> SELECT deptno, max(sal)


2 FROM emp
3 GROUP BY deptno
4 HAVING max(sal)>2900;

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

5-22 Copyright  Oracle Corporation, 1998. All rights reserved.


Using the HAVING Clause

SQL> SELECT job, SUM(sal) PAYROLL


2 FROM emp
3 WHERE job NOT LIKE 'SALES%'
4 GROUP BY job
5 HAVING SUM(sal)>5000
6 ORDER BY SUM(sal);

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

5-23 Copyright  Oracle Corporation, 1998. All rights reserved.


Nesting Group Functions
Display
Display the
the maximum
maximum average
average salary.
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 column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];

Order
Order of
of evaluation
evaluation of
of the
the clauses:
clauses:
•• WHERE
WHERE clause
clause
•• GROUP
GROUP BY
BY clause
clause
•• HAVING
HAVING clause
clause

5-25 Copyright  Oracle Corporation, 1998. All rights reserved.


Practice Overview
• •Showing
Showingdifferent
differentqueries
queriesthat
thatuse
usegroup
groupfunctions
functions
• •Grouping
Groupingby
byrows
rowsto
toachieve
achievemore
morethan
thanone
oneresult
result
• •Excluding
Excludinggroups
groupsby
byusing
usingthe
theHAVING
HAVINGclause
clause

5-26 Copyright  Oracle Corporation, 1998. All rights reserved.

You might also like