Day-2 Aggregate Functions
Day-2 Aggregate Functions
maximum
salary in
the EMP table
MAX(SAL)
--------5000
AVG(sal), MAX(sal),
MIN(sal), SUM(sal)
emp
job LIKE 'SALES%';
MIN(hiredate), MAX(hiredate)
emp;
MIN(HIRED MAX(HIRED
--------- --------17-DEC-80 12-JAN-83
COUNT(*)
emp
deptno = 30;
COUNT(comm)
emp
deptno = 30;
AVG(COMM)
--------550
AVG(NVL(COMM,0))
---------------157.14286
2916.6667
average
salary
2175 in EMP
table
for each
department
1566.6667
DEPTNO AVG(SAL)
------- --------10 2916.6667
20
2175
30 1566.6667
column, group_function
table
condition]
group_by_expression]
column];
DEPTNO AVG(SAL)
--------- --------10 2916.6667
20
2175
30 1566.6667
AVG(SAL)
--------2916.6667
2175
1566.6667
Grouping by More
Than One Column
EMP
DEPTNO
--------10
10
10
20
20
20
20
20
30
30
30
30
30
30
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
sum salaries in
the EMP table
for each job,
grouped by
department
DEPTNO
-------10
10
10
20
20
20
30
30
30
JOB
SUM(SAL)
--------- --------CLERK
1300
MANAGER
2450
PRESIDENT
5000
ANALYST
6000
CLERK
1900
MANAGER
2975
CLERK
950
MANAGER
2850
SALESMAN
5600
DEPTNO JOB
SUM(SAL)
--------- --------- --------10 CLERK
1300
10 MANAGER
2450
10 PRESIDENT
5000
20 ANALYST
6000
20 CLERK
1900
...
9 rows selected.
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.
e
s
u
cla
Y
B
SQL>
SQL> SELECT
SELECT deptno,
deptno, COUNT(ename)
COUNT(ename) P
U
22 FROM
emp;
FROM
emp;
O
R
G
he
t
SELECT
SELECT deptno,
deptno, COUNT(ename)
COUNT(ename)
in
g
**
in
s
ERROR
ERROR at
at line
line 1:
1: is
m
ORA-00937:
single-group
n
ORA-00937: not
not aa
single-group group
group function
function
m
lu
o
C
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)
e
s
emp
u
emp
a
l
AVG(sal)
c
AVG(sal) >> 2000
2000
E
deptno;
deptno;
ER s
H up s
W ro
e
WHERE
h ict g
WHERE AVG(sal)
AVG(sal) >> 2000
2000
t
e str
**
s
u re
ERROR
t
ERROR at
at line
line 3:
3:
o to
n
ORA-00934:
group
function
ORA-00934: groupanfunction is
is not
not allowed
allowed here
here
C
5000
3000
2850
maximum
salary
per department
greater than
$2900
DEPTNO MAX(SAL)
--------- --------10
5000
20
3000
column, group_function
table
condition]
group_by_expression]
group_condition]
column];
SELECT
FROM
GROUP BY
HAVING
deptno, max(sal)
emp
deptno
max(sal)>2900;
DEPTNO MAX(SAL)
--------- --------10
5000
20
3000
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
JOB
PAYROLL
--------- --------ANALYST
6000
MANAGER
8275
Summary
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
column, group_function
table
condition]
group_by_expression]
group_condition]
column];
COUNT(*)
---------- -------ANALYST
2
CLERK
MANAGER
3
PRESIDENT
1
MIN(SAL)
-------3000
2450
1300
1100