Upload
muhammad-rana-farhan
View
215
Download
0
Embed Size (px)
Citation preview
8/14/2019 Les 05
1/26
55
Aggregating DataUsing Group Functions
Aggregating DataUsing Group Functions
8/14/2019 Les 05
2/26
5-2
ObjectivesObjectives
After completing this lesson, you shouldAfter completing this lesson, you shouldbe able to do the following: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 byusing the HAVING clause
After completing this lesson, you shouldAfter completing this lesson, you shouldbe able to do the following: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 byusing the HAVING clause
8/14/2019 Les 05
3/26
5-3
What Are Group Functions?What Are Group Functions?Group functions operate on sets of rows to giveGroup functions operate on sets of rows to give
one result per group.one result per group.
Group functions operate on sets of rows to giveGroup functions operate on sets of rows to give
one result per group.one result per group.EMPEMP
maximummaximum
salary insalary in
the EMP tablethe EMP table
DEPTNO SAL
--------- ---------10 2450
10 5000
10 130020 800
20 110020 3000
20 3000
20 2975
30 160030 2850
30 125030 950
30 1500
30 1250
MAX(SAL)
---------
5000
8/14/2019 Les 05
4/26
5-4
Types of Group FunctionsTypes of Group Functions
AVG
COUNT
MAX MIN
STDDEV
SUM VARIANCE
AVG
COUNT
MAX MIN
STDDEV
SUM VARIANCE
8/14/2019 Les 05
5/26
5-5
Using Group FunctionsUsing Group Functions
SELECT [column,] group_function(column)
FROM table
[WHERE condition]
[GROUP BY column][ORDER BY column];
8/14/2019 Les 05
6/26
5-6
Using AVG and SUM FunctionsUsing AVG and SUM Functions
AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)
-------- --------- --------- ---------
1400 1600 1250 5600
You can use AVG and SUM for numeric data.You can use AVG and SUM for numeric data.You can use AVG and SUM for numeric data.You can use AVG and SUM for numeric data.
SQL> SELECT AVG(sal), MAX(sal),
2 MIN(sal), SUM(sal)
3 FROM emp
4 WHERE job LIKE 'SALES%';
8/14/2019 Les 05
7/26
5-7
Using MIN and MAX FunctionsUsing MIN and MAX Functions
You can use MIN and MAX for any datatype.You can use MIN and MAX for any datatype.You can use MIN and MAX for any datatype.You can use MIN and MAX for any datatype.
SQL> SELECT MIN(hiredate), MAX(hiredate)
2 FROM emp;
MIN(HIRED MAX(HIRED
--------- ---------
17-DEC-80 12-JAN-83
8/14/2019 Les 05
8/26
5-8
Using the COUNT FunctionUsing the COUNT Function
COUNT(*)
---------
6
SQL> SELECT COUNT(*)
2 FROM emp
3 WHERE deptno = 30;
COUNT(*) returns the number of rows in aCOUNT(*) returns the number of rows in atable.table.COUNT(*) returns the number of rows in aCOUNT(*) returns the number of rows in atable.table.
8/14/2019 Les 05
9/26
5-9
Using the COUNT FunctionUsing the COUNT Function
COUNT(COUNT(exprexpr) returns the number of) returns the number ofnonnull rows.nonnull rows.COUNT(COUNT(exprexpr) returns the number of) returns the number ofnonnull rows.nonnull rows.
SQL> SELECT COUNT(comm)
2 FROM emp
3 WHERE deptno = 30;
COUNT(COMM)
-----------
4
8/14/2019 Les 05
10/26
5-10
Group Functions and Null ValuesGroup Functions and Null Values
Group functions ignore null values in theGroup functions ignore null values in thecolumn.column.Group functions ignore null values in theGroup functions ignore null values in thecolumn.column.
SQL> SELECT AVG(comm)
2 FROM emp;
AVG(COMM)
---------
550
8/14/2019 Les 05
11/26
5-11
Using the NVL Function
with Group Functions
Using the NVL Function
with Group FunctionsThe NVL function forces group functionsThe NVL function forces group functionsto include null values.to include null values.The NVL function forces group functionsThe NVL function forces group functionsto include null values.to include null values.
SQL> SELECT AVG(NVL(comm,0))
2 FROM emp;
AVG(NVL(COMM,0))
----------------
157.14286
8/14/2019 Les 05
12/26
5-12
Creating Groups of DataCreating Groups of Data
EMPEMP
averageaveragesalarysalary
in EMPin EMP
tabletable
for eachfor each
departmentdepartment
2916.66672916.6667
21752175
1566.66671566.6667
DEPTNO SAL
--------- ---------10 2450
10 500010 1300
20 80020 1100
20 3000
20 300020 2975
30 1600
30 285030 125030 950
30 150030 1250
DEPTNO AVG(SAL)
------- ---------
10 2916.6667
20 2175
30 1566.6667
8/14/2019 Les 05
13/26
5-13
Creating Groups of Data:
GROUP BY Clause
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 rows in a table into smaller groupsDivide rows in a table into smaller groupsby using the GROUP BY clause.by using the GROUP BY clause.Divide rows in a table into smaller groupsDivide rows in a table into smaller groupsby using the GROUP BY clause.by using the GROUP BY clause.
8/14/2019 Les 05
14/26
5-14
Using the GROUP BY ClauseUsing the GROUP BY Clause
All columns in the SELECT list that are notAll columns in the SELECT list that are notin group functions must be in the GROUPin group functions must be in the GROUPBY clause.BY clause.
All columns in the SELECT list that are notAll columns in the SELECT list that are notin group functions must be in the GROUPin group functions must be in the GROUPBY clause.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
8/14/2019 Les 05
15/26
5-15
Using the GROUP BY ClauseUsing the GROUP BY Clause
The GROUP BY column does not have toThe GROUP BY column does not have tobe in the SELECT list.be in the SELECT list.The GROUP BY column does not have toThe GROUP BY column does not have tobe in the SELECT list.be in the SELECT list.
SQL> SELECT AVG(sal)
2 FROM emp
3 GROUP BY deptno;
AVG(SAL)
---------
2916.66672175
1566.6667
8/14/2019 Les 05
16/26
5-16
Grouping by More
Than One Column
Grouping by More
Than One ColumnEMPEMP
sum salaries insum salaries in
the EMP tablethe EMP table
for each job,for each job,
grouped bygrouped by
departmentdepartment
DEPTNO JOB SAL
--------- --------- ---------
10 MANAGER 2450
10 PRESIDENT 5000
10 CLERK 1300
20 CLERK 800
20 CLERK 1100
20 ANALYST 3000
20 ANALYST 3000
20 MANAGER 2975
30 SALESMAN 1600
30 MANAGER 2850
30 SALESMAN 1250
30 CLERK 950
30 SALESMAN 1500
30 SALESMAN 1250
JOB SUM(SAL)
--------- ---------
CLERK 1300 MANAGER 24
PRESIDENT 5000
ANALYST 60
CLERK 1900
MANAGER 29
CLERK 950 MANAGER 28
SALESMAN 5600
DEPTNO
--------
1010
10
20
20
20
3030
30
8/14/2019 Les 05
17/26
5-17
Using the GROUP BY Clause
on Multiple Columns
Using the GROUP BY Clause
on Multiple ColumnsSQL> 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 500020 ANALYST 6000
20 CLERK 1900
...
9 rows selected.
8/14/2019 Les 05
18/26
5-18
Illegal Queries
Using Group Functions
Illegal Queries
Using Group FunctionsAny column or expression in the SELECTAny column or expression in the SELECTlist that is not an aggregate function mustlist that is not an aggregate function mustbe in the GROUP BY clause.be in the GROUP BY clause.
Any column or expression in the SELECTAny column or expression in the SELECTlist that is not an aggregate function mustlist that is not an aggregate function mustbe in the GROUP BY clause.be in the GROUP BY clause.
SQL> SELECT deptno, COUNT(ename)
2 FROM emp;
SQL> SELECT deptno, COUNT(ename)
2 FROM emp;
SELECT deptno, COUNT(ename)*
ERROR at line 1:
ORA-00937: not a single-group group function
SELECT deptno, COUNT(ename)*
ERROR at line 1:
ORA-00937: not a single-group group function
Columnmissingin
theGROUPBYcl
ause
Columnmissingin
theGROUPBYcl
ause
Columnmissingin
theGROUPBYcl
ause
Columnmissing
intheGROUPBY
clause
8/14/2019 Les 05
19/26
5-19
Illegal Queries
Using Group Functions
Illegal Queries
Using Group FunctionsYou cannot use the WHERE clause to restrict
groups.
You use the HAVING clause to restrict groups.
You cannot use the WHERE clause to restrictgroups.
You use the HAVING clause to restrict groups.
SQL> SELECT deptno, AVG(sal)
2 FROM emp
3 WHERE AVG(sal) > 2000
4 GROUP BY deptno;
SQL> SELECT deptno, AVG(sal)
2 FROM emp
3 WHERE AVG(sal) > 2000
4 GROUP BY deptno;
WHERE AVG(sal) > 2000
*
ERROR at line 3:
ORA-00934: group function is not allowed here
WHERE AVG(sal) > 2000
*
ERROR at line 3:
ORA-00934: group function is not allowed hereCan
notusethe
WHER
Eclau
se
Cannot
usetheWH
EREc
lause
torest
rictgroups
torest
rictgroups
Cannot
usetheWH
EREc
lause
Cannot
usetheWH
EREc
lause
torest
rictgroups
torest
rictgroups
8/14/2019 Les 05
20/26
8/14/2019 Les 05
21/26
8/14/2019 Les 05
22/26
5-22
Using the HAVING ClauseUsing 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
8/14/2019 Les 05
23/26
5-23
Using the HAVING ClauseUsing 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)>50006 ORDER BY SUM(sal);
JOB PAYROLL
--------- ---------
ANALYST 6000 MANAGER 8275
8/14/2019 Les 05
24/26
5-24
Nesting Group FunctionsNesting Group Functions
SQL> SELECT max(avg(sal))
2 FROM emp
3 GROUP BY deptno;
MAX(AVG(SAL))
-------------
2916.6667
Display the maximum average salary.Display the maximum average salary.Display the maximum average salary.Display the maximum average salary.
8/14/2019 Les 05
25/26
5-25
SummarySummary
SELECTcolumn
,group_function(column)FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Order of evaluation of the clauses:Order of evaluation of the clauses:
WHERE clause
GROUP BY clause HAVING clause
Order of evaluation of the clauses:Order of evaluation of the clauses:
WHERE clause
GROUP BY clause HAVING clause
8/14/2019 Les 05
26/26
5-26
Practice OverviewPractice Overview
Showing different queries that use group functions
Grouping by rows to achieve more than one result
Excluding groups by using the HAVING clause
Showing different queries that use group functions
Grouping by rows to achieve more than one result
Excluding groups by using the HAVING clause