SlideShare a Scribd company logo
© 2009 Punjab University College of Information Technology (PUCIT) Slide 1
(SQL)
Aggregating Data
Using Group Functions
Asif Sohail
University of the Punjab
Punjab University College of Information Technology (PUCIT)
© 2009 Punjab University College of Information Technology (PUCIT) Slide 2
What Are Group Functions?
• Group functions operate on sets of rows to give one
result per group.
EMP
“maximum
salary in
the EMP table”
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
MAX(SAL)
---------
5000
© 2009 Punjab University College of Information Technology (PUCIT) Slide 3
Types of Group Functions
Function Description
MAX Returns the largest value
MIN Returns the smallest value
SUM Returns the sum of values
AVG Returns the average of values (ignoring NULL values)
COUNT Returns the count of NOT NULL values
MEDIAN Returns the middle value
STDEVE Returns the standard deviation (ignoring NULL values)
VARIANCE Returns the variation (ignoring NULL values)
© 2009 Punjab University College of Information Technology (PUCIT) Slide 4
Using Group Functions
SELECT [column,] group_function(column)
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
© 2009 Punjab University College of Information Technology (PUCIT) Slide 5
Using MIN and MAX Functions
• 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
© 2009 Punjab University College of Information Technology (PUCIT) Slide 6
Using 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.
SQL> SELECT AVG(sal), MAX(sal),
2 MIN(sal), SUM(sal)
3 FROM emp
4 WHERE job LIKE 'SALES%';
© 2009 Punjab University College of Information Technology (PUCIT) Slide 7
Using the COUNT Function
COUNT(*)
---------
6
SQL> SELECT COUNT(*)
2 FROM emp
3 WHERE deptno = 30;
• COUNT(*) returns the number of rows in a table
satisfying a given condition (if any).
© 2009 Punjab University College of Information Technology (PUCIT) Slide 8
Using the COUNT Function
• COUNT(expr) returns the number of rows
with non-null values for the expr.
SQL> SELECT COUNT(comm)
2 FROM emp
3 WHERE deptno = 30;
COUNT(COMM)
-----------
4
© 2009 Punjab University College of Information Technology (PUCIT) Slide 9
Using the COUNT Function
• COUNT(DISTINCT expr) returns the number
of distinct non-null values of the expr.
SQL> SELECT COUNT(DISTINCT deptno)
2 FROM emp;
COUNT(DISTINCT deptno)
----------------------
4
© 2009 Punjab University College of Information Technology (PUCIT) Slide 10
Group Functions and Null Values
• Group functions ignore null values in the
column.
SQL> SELECT AVG(comm)
2 FROM emp;
AVG(COMM)
---------
550
© 2009 Punjab University College of Information Technology (PUCIT) Slide 11
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
© 2009 Punjab University College of Information Technology (PUCIT) Slide 12
Creating Groups of Data
EMP
“average
salary
in EMP
table
for each
department”
2916.6667
2175
1566.6667
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
DEPTNO AVG(SAL)
------- ---------
10 2916.6667
20 2175
30 1566.6667
© 2009 Punjab University College of Information Technology (PUCIT) Slide 13
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 groups by
using the GROUP BY clause.
© 2009 Punjab University College of Information Technology (PUCIT) Slide 14
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
© 2009 Punjab University College of Information Technology (PUCIT) Slide 15
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
© 2009 Punjab University College of Information Technology (PUCIT) Slide 16
Grouping by More
Than One Column
EMP
“sum salaries in
the EMP table
for each job,
grouped by
department”
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 2450
PRESIDENT 5000
ANALYST 6000
CLERK 1900
MANAGER 2975
CLERK 950
MANAGER 2850
SALESMAN 5600
DEPTNO
--------
10
10
10
20
20
20
30
30
30
© 2009 Punjab University College of Information Technology (PUCIT) Slide 17
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.
© 2009 Punjab University College of Information Technology (PUCIT) Slide 18
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> SELECT deptno, COUNT(ename)
2 FROM emp;
SELECT deptno, COUNT(ename)
*
ERROR at line 1:
ORA-00937: not a single-group group function
© 2009 Punjab University College of Information Technology (PUCIT) Slide 19
Illegal Queries
Using Group Functions
– You cannot use the WHERE clause to restrict groups.
– 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;
WHERE AVG(sal) > 2000
*
ERROR at line 3:
ORA-00934: group function is not allowed here
© 2009 Punjab University College of Information Technology (PUCIT) Slide 20
Excluding Group Results
“maximum
salary
per department
greater than
$2900”
EMP
5000
3000
2850
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
DEPTNO MAX(SAL)
--------- ---------
10 5000
20 3000
© 2009 Punjab University College of Information Technology (PUCIT) Slide 21
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 column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
© 2009 Punjab University College of Information Technology (PUCIT) Slide 22
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
© 2009 Punjab University College of Information Technology (PUCIT) Slide 23
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
© 2009 Punjab University College of Information Technology (PUCIT) Slide 24
Nesting Group Functions
SQL> SELECT max(avg(sal))
2 FROM emp
3 GROUP BY deptno;
MAX(AVG(SAL))
-------------
2916.6667
• Display the maximum average salary.
© 2009 Punjab University College of Information Technology (PUCIT) Slide 25
Extended Group by Clauses
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno;
• ROLLUP extends the GROUP BY clause to
return a row containing a subtotal for each group
of rows, plus a row containing a grand total for
all the groups.
SELECT deptno, SUM(sal)
FROM emp
GROUP BY ROLLUP(deptno);
DEPTNO SUM(SAL)
10 8750
20 10875
30 9400
- 29025
DEPTNO SUM(SAL)
30 9400
20 10875
10 8750
© 2009 Punjab University College of Information Technology (PUCIT) Slide 26
Extended Group by Clauses
SELECT deptno,job,SUM(sal)
FROM emp
GROUP BY ROLLUP(deptno,job)
• Multiple columns can be passed to ROLLUP.
• The order of ROWS is significant.
SELECT deptno,job,SUM(sal)
FROM emp
GROUP BY ROLLUP(job,deptno);
DEPTNO JOB SUM(SAL)
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 - 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 - 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 - 9400
- - 29025
DEPTNO JOB SUM(SAL)
10 CLERK 1300
20 CLERK 1900
30 CLERK 950
- CLERK 4150
20 ANALYST 6000
- ANALYST 6000
10 MANAGER 2450
20 MANAGER 2975
30 MANAGER 2850
- MANAGER 8275
- - -
- - 29025
© 2009 Punjab University College of Information Technology (PUCIT) Slide 27
Extended Group by Clauses
• CUBE extends the GROUP BY clause to return
rows containing a subtotal for all combinations of
the values in the columns, plus a row containing
the grand total.
• Unlike ROLLUP, the order of columns in a CUBE
is not significant.
© 2009 Punjab University College of Information Technology (PUCIT) Slide 28
SELECT deptno, job,SUM(sal)
FROM emp
GROUP BY CUBE(deptno,job);
DEPTNO JOB SUM(SAL)
- - 29025
10 - 8750
20 - 10875
30 - 9400
- CLERK 4150
10 CLERK 1300
20 CLERK 1900
30 CLERK 950
- ANALYST 6000
20 ANALYST 6000
- MANAGER 8275
10 MANAGER 2450
20 MANAGER 2975
30 MANAGER 2850
- SALESMAN 5600
30 SALESMAN 5600
- PRESIDENT 5000
10 PRESIDENT 5000
SELECT deptno,job,SUM(sal)
FROM emp
GROUP BY ROLLUP(deptno,job)
DEPTNO JOB SUM(SAL)
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 - 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 - 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 - 9400
- - 29025
© 2009 Punjab University College of Information Technology (PUCIT) Slide 29
Summary
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
• Order of evaluation of the clauses:
– WHERE clause
– GROUP BY clause
– HAVING clause
© 2009 Punjab University College of Information Technology (PUCIT) Slide 30
Thank you for your attention.
Asif Sohail
Assistant Professor
University of the Punjab
Punjab University College of Information Technology (PUCIT)
Allama Iqbal (Old) Campus, Anarkali
Lahore, Pakistan
Tel: +92-(0)42-111-923-923 Ext. 154
E-mail: asif@pucit.edu.pk

More Related Content

PPT
Les05[1]Aggregating Data Using Group Functions
PPT
SQL WORKSHOP::Lecture 5
PPT
Databasessanddataanalysis122222222222.ppt
PPT
SQL5.ppt
PPTX
Les05 Aggregating Data Using Group Function
PPT
PDF
Sql group by clause
PPTX
NCTU ppt 2023-2024_WEEK4-MySQL-Built-In-Functions.pptx
Les05[1]Aggregating Data Using Group Functions
SQL WORKSHOP::Lecture 5
Databasessanddataanalysis122222222222.ppt
SQL5.ppt
Les05 Aggregating Data Using Group Function
Sql group by clause
NCTU ppt 2023-2024_WEEK4-MySQL-Built-In-Functions.pptx

Similar to Data Base Management Slides SQL with example (20)

PDF
ILOUG 2019 - SQL features for Developers
PDF
Cube rollup slides
DOC
ORACLE NOTES
PPT
Les09[1]Manipulating Data
PDF
OOW19 - Ten Amazing SQL features
PPT
Sql query [select, sub] 4
PPT
PHP mysql Aggregate functions
PPTX
Lec9_Lab_CSC371_Database Systems course.pptx
PPT
Sqlplus
PDF
Sangam 19 - Analytic SQL
PDF
Latin America Tour 2019 - 10 great sql features
PPT
Aggregate Functions,Final
PPT
SQL WORKSHOP::Lecture 9
PDF
حل اسئلة الكتاب السعودى فى شرح قواعد البيانات اوراكل
RTF
Trigger and cursor program using sql
PPTX
Basic SQL Queries with Clauses Learning.pptx
PPT
Chapter5.ppt
PDF
Oracle Database Advanced Querying
PDF
UKOUG 2019 - SQL features
PPTX
Analytic functions in Oracle SQL - BIWA 2017
ILOUG 2019 - SQL features for Developers
Cube rollup slides
ORACLE NOTES
Les09[1]Manipulating Data
OOW19 - Ten Amazing SQL features
Sql query [select, sub] 4
PHP mysql Aggregate functions
Lec9_Lab_CSC371_Database Systems course.pptx
Sqlplus
Sangam 19 - Analytic SQL
Latin America Tour 2019 - 10 great sql features
Aggregate Functions,Final
SQL WORKSHOP::Lecture 9
حل اسئلة الكتاب السعودى فى شرح قواعد البيانات اوراكل
Trigger and cursor program using sql
Basic SQL Queries with Clauses Learning.pptx
Chapter5.ppt
Oracle Database Advanced Querying
UKOUG 2019 - SQL features
Analytic functions in Oracle SQL - BIWA 2017
Ad

Recently uploaded (20)

PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Approach and Philosophy of On baking technology
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Encapsulation theory and applications.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Big Data Technologies - Introduction.pptx
Encapsulation_ Review paper, used for researhc scholars
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Approach and Philosophy of On baking technology
The Rise and Fall of 3GPP – Time for a Sabbatical?
Diabetes mellitus diagnosis method based random forest with bat algorithm
Spectral efficient network and resource selection model in 5G networks
Encapsulation theory and applications.pdf
Machine learning based COVID-19 study performance prediction
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Review of recent advances in non-invasive hemoglobin estimation
NewMind AI Weekly Chronicles - August'25-Week II
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Unlocking AI with Model Context Protocol (MCP)
Reach Out and Touch Someone: Haptics and Empathic Computing
Building Integrated photovoltaic BIPV_UPV.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
“AI and Expert System Decision Support & Business Intelligence Systems”
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Big Data Technologies - Introduction.pptx
Ad

Data Base Management Slides SQL with example

  • 1. © 2009 Punjab University College of Information Technology (PUCIT) Slide 1 (SQL) Aggregating Data Using Group Functions Asif Sohail University of the Punjab Punjab University College of Information Technology (PUCIT)
  • 2. © 2009 Punjab University College of Information Technology (PUCIT) Slide 2 What Are Group Functions? • Group functions operate on sets of rows to give one result per group. EMP “maximum salary in the EMP table” 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 MAX(SAL) --------- 5000
  • 3. © 2009 Punjab University College of Information Technology (PUCIT) Slide 3 Types of Group Functions Function Description MAX Returns the largest value MIN Returns the smallest value SUM Returns the sum of values AVG Returns the average of values (ignoring NULL values) COUNT Returns the count of NOT NULL values MEDIAN Returns the middle value STDEVE Returns the standard deviation (ignoring NULL values) VARIANCE Returns the variation (ignoring NULL values)
  • 4. © 2009 Punjab University College of Information Technology (PUCIT) Slide 4 Using Group Functions SELECT [column,] group_function(column) FROM table [WHERE condition] [GROUP BY column] [ORDER BY column];
  • 5. © 2009 Punjab University College of Information Technology (PUCIT) Slide 5 Using MIN and MAX Functions • 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
  • 6. © 2009 Punjab University College of Information Technology (PUCIT) Slide 6 Using 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. SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES%';
  • 7. © 2009 Punjab University College of Information Technology (PUCIT) Slide 7 Using the COUNT Function COUNT(*) --------- 6 SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE deptno = 30; • COUNT(*) returns the number of rows in a table satisfying a given condition (if any).
  • 8. © 2009 Punjab University College of Information Technology (PUCIT) Slide 8 Using the COUNT Function • COUNT(expr) returns the number of rows with non-null values for the expr. SQL> SELECT COUNT(comm) 2 FROM emp 3 WHERE deptno = 30; COUNT(COMM) ----------- 4
  • 9. © 2009 Punjab University College of Information Technology (PUCIT) Slide 9 Using the COUNT Function • COUNT(DISTINCT expr) returns the number of distinct non-null values of the expr. SQL> SELECT COUNT(DISTINCT deptno) 2 FROM emp; COUNT(DISTINCT deptno) ---------------------- 4
  • 10. © 2009 Punjab University College of Information Technology (PUCIT) Slide 10 Group Functions and Null Values • Group functions ignore null values in the column. SQL> SELECT AVG(comm) 2 FROM emp; AVG(COMM) --------- 550
  • 11. © 2009 Punjab University College of Information Technology (PUCIT) Slide 11 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
  • 12. © 2009 Punjab University College of Information Technology (PUCIT) Slide 12 Creating Groups of Data EMP “average salary in EMP table for each department” 2916.6667 2175 1566.6667 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 DEPTNO AVG(SAL) ------- --------- 10 2916.6667 20 2175 30 1566.6667
  • 13. © 2009 Punjab University College of Information Technology (PUCIT) Slide 13 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 groups by using the GROUP BY clause.
  • 14. © 2009 Punjab University College of Information Technology (PUCIT) Slide 14 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
  • 15. © 2009 Punjab University College of Information Technology (PUCIT) Slide 15 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
  • 16. © 2009 Punjab University College of Information Technology (PUCIT) Slide 16 Grouping by More Than One Column EMP “sum salaries in the EMP table for each job, grouped by department” 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 2450 PRESIDENT 5000 ANALYST 6000 CLERK 1900 MANAGER 2975 CLERK 950 MANAGER 2850 SALESMAN 5600 DEPTNO -------- 10 10 10 20 20 20 30 30 30
  • 17. © 2009 Punjab University College of Information Technology (PUCIT) Slide 17 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.
  • 18. © 2009 Punjab University College of Information Technology (PUCIT) Slide 18 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> SELECT deptno, COUNT(ename) 2 FROM emp; SELECT deptno, COUNT(ename) * ERROR at line 1: ORA-00937: not a single-group group function
  • 19. © 2009 Punjab University College of Information Technology (PUCIT) Slide 19 Illegal Queries Using Group Functions – You cannot use the WHERE clause to restrict groups. – 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; WHERE AVG(sal) > 2000 * ERROR at line 3: ORA-00934: group function is not allowed here
  • 20. © 2009 Punjab University College of Information Technology (PUCIT) Slide 20 Excluding Group Results “maximum salary per department greater than $2900” EMP 5000 3000 2850 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 DEPTNO MAX(SAL) --------- --------- 10 5000 20 3000
  • 21. © 2009 Punjab University College of Information Technology (PUCIT) Slide 21 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 column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
  • 22. © 2009 Punjab University College of Information Technology (PUCIT) Slide 22 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
  • 23. © 2009 Punjab University College of Information Technology (PUCIT) Slide 23 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
  • 24. © 2009 Punjab University College of Information Technology (PUCIT) Slide 24 Nesting Group Functions SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno; MAX(AVG(SAL)) ------------- 2916.6667 • Display the maximum average salary.
  • 25. © 2009 Punjab University College of Information Technology (PUCIT) Slide 25 Extended Group by Clauses SELECT deptno, SUM(sal) FROM emp GROUP BY deptno; • ROLLUP extends the GROUP BY clause to return a row containing a subtotal for each group of rows, plus a row containing a grand total for all the groups. SELECT deptno, SUM(sal) FROM emp GROUP BY ROLLUP(deptno); DEPTNO SUM(SAL) 10 8750 20 10875 30 9400 - 29025 DEPTNO SUM(SAL) 30 9400 20 10875 10 8750
  • 26. © 2009 Punjab University College of Information Technology (PUCIT) Slide 26 Extended Group by Clauses SELECT deptno,job,SUM(sal) FROM emp GROUP BY ROLLUP(deptno,job) • Multiple columns can be passed to ROLLUP. • The order of ROWS is significant. SELECT deptno,job,SUM(sal) FROM emp GROUP BY ROLLUP(job,deptno); DEPTNO JOB SUM(SAL) 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 - 8750 20 CLERK 1900 20 ANALYST 6000 20 MANAGER 2975 20 - 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 30 - 9400 - - 29025 DEPTNO JOB SUM(SAL) 10 CLERK 1300 20 CLERK 1900 30 CLERK 950 - CLERK 4150 20 ANALYST 6000 - ANALYST 6000 10 MANAGER 2450 20 MANAGER 2975 30 MANAGER 2850 - MANAGER 8275 - - - - - 29025
  • 27. © 2009 Punjab University College of Information Technology (PUCIT) Slide 27 Extended Group by Clauses • CUBE extends the GROUP BY clause to return rows containing a subtotal for all combinations of the values in the columns, plus a row containing the grand total. • Unlike ROLLUP, the order of columns in a CUBE is not significant.
  • 28. © 2009 Punjab University College of Information Technology (PUCIT) Slide 28 SELECT deptno, job,SUM(sal) FROM emp GROUP BY CUBE(deptno,job); DEPTNO JOB SUM(SAL) - - 29025 10 - 8750 20 - 10875 30 - 9400 - CLERK 4150 10 CLERK 1300 20 CLERK 1900 30 CLERK 950 - ANALYST 6000 20 ANALYST 6000 - MANAGER 8275 10 MANAGER 2450 20 MANAGER 2975 30 MANAGER 2850 - SALESMAN 5600 30 SALESMAN 5600 - PRESIDENT 5000 10 PRESIDENT 5000 SELECT deptno,job,SUM(sal) FROM emp GROUP BY ROLLUP(deptno,job) DEPTNO JOB SUM(SAL) 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 - 8750 20 CLERK 1900 20 ANALYST 6000 20 MANAGER 2975 20 - 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 30 - 9400 - - 29025
  • 29. © 2009 Punjab University College of Information Technology (PUCIT) Slide 29 Summary SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column]; • Order of evaluation of the clauses: – WHERE clause – GROUP BY clause – HAVING clause
  • 30. © 2009 Punjab University College of Information Technology (PUCIT) Slide 30 Thank you for your attention. Asif Sohail Assistant Professor University of the Punjab Punjab University College of Information Technology (PUCIT) Allama Iqbal (Old) Campus, Anarkali Lahore, Pakistan Tel: +92-(0)42-111-923-923 Ext. 154 E-mail: asif@pucit.edu.pk