3 Copyright © 2005, Oracle. All rights reserved. Creating an Oracle Database.
5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group...
-
Upload
elfrieda-conley -
Category
Documents
-
view
214 -
download
0
Transcript of 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group...
![Page 1: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/1.jpg)
5Copyright © 2007, Oracle. All rights reserved.
Reporting Aggregated DataUsing the Group Functions
![Page 2: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/2.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 2
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 by using the GROUP BY clause
• Include or exclude grouped rows by using the HAVING clause
![Page 3: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/3.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 3
Lesson Agenda
• Group functions:– Types and syntax– Use AVG, SUM, MIN, MAX, COUNT– Use DISTINCT keyword within group functions– NULL values in a group function
• Grouping rows:– GROUP BY clause– HAVING clause
• Nesting group functions
![Page 4: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/4.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 4
What Are Group Functions?
Group functions operate on sets of rows to give one result per group.
EMPLOYEES
Maximum salary in EMPLOYEES table
…
![Page 5: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/5.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 5
Types of Group Functions
• AVG• COUNT• MAX• MIN• STDDEV• SUM• VARIANCE
Groupfunctions
![Page 6: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/6.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 6
SELECT group_function(column), ...FROM table[WHERE condition][ORDER BY column];
Group Functions: Syntax
![Page 7: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/7.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 7
SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)FROM employeesWHERE job_id LIKE '%REP%';
Using the AVG and SUM Functions
You can use AVG and SUM for numeric data.
![Page 8: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/8.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 8
SELECT MIN(hire_date), MAX(hire_date)FROM employees;
Using the MIN and MAX Functions
You can use MIN and MAX for numeric, character, and date data types.
![Page 9: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/9.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 9
Using the COUNT Function
COUNT(*) returns the number of rows in a table:
COUNT(expr) returns the number of rows with non-null values for expr:
SELECT COUNT(commission_pct)FROM employeesWHERE department_id = 80;
SELECT COUNT(*)FROM employeesWHERE department_id = 50;
1
2
![Page 10: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/10.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 10
SELECT COUNT(DISTINCT department_id)FROM employees;
Using the DISTINCT Keyword
• COUNT(DISTINCT expr) returns the number of distinct non-null values of expr.
• To display the number of distinct department values in the EMPLOYEES table:
![Page 11: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/11.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 11
Group Functions and Null Values
Group functions ignore null values in the column:
The NVL function forces group functions to include null values:
SELECT AVG(commission_pct)FROM employees;
SELECT AVG(NVL(commission_pct, 0))FROM employees;
1
2
![Page 12: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/12.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 12
Lesson Agenda
• Group functions:– Types and syntax– Use AVG, SUM, MIN, MAX, COUNT– Use DISTINCT keyword within group functions– NULL values in a group function
• Grouping rows:– GROUP BY clause– HAVING clause
• Nesting group functions
![Page 13: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/13.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 13
Creating Groups of Data
EMPLOYEES
…
4400
9500
3500
6400
10033
Average salary in EMPLOYEES table for each department
![Page 14: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/14.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 14
Creating Groups of Data: GROUP BY Clause Syntax
You can divide rows in a table into smaller groups by using the GROUP BY clause.
SELECT column, group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column];
![Page 15: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/15.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 15
SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id ;
Using the GROUP BY Clause
All columns in the SELECT list that are not in group functions must be in the GROUP BY clause.
![Page 16: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/16.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 16
Using the GROUP BY Clause
The GROUP BY column does not have to be in the SELECT list.
SELECT AVG(salary)FROM employeesGROUP BY department_id ;
![Page 17: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/17.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 17
Grouping by More than One Column
EMPLOYEES Add the salaries in the EMPLOYEEStable for each job, grouped bydepartment.
…
![Page 18: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/18.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 18
SELECT department_id dept_id, job_id, SUM(salary)FROM employeesGROUP BY department_id, job_id ORDER BY department_id;
Using the GROUP BY Clause on Multiple Columns
![Page 19: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/19.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 19
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:
SELECT department_id, COUNT(last_name)FROM employees;
SELECT department_id, job_id, COUNT(last_name)FROM employeesGROUP BY department_id;
A GROUP BY clause must be added to count the last names for each department_id.
Either add job_id in the GROUP BY or remove the job_id column from the SELECT list.
![Page 20: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/20.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 20
Illegal Queries Using Group Functions
• You cannot use the WHERE clause to restrict groups.
• You use the HAVING clause to restrict groups.
• You cannot use group functions in the WHERE clause.
SELECT department_id, AVG(salary)FROM employeesWHERE AVG(salary) > 8000GROUP BY department_id;
Cannot use the WHERE clause to restrict groups
![Page 21: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/21.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 21
Restricting Group Results
EMPLOYEES
…
The maximum salary per department when it isgreater than $10,000
![Page 22: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/22.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 22
SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];
Restricting Group Results with the HAVING Clause
When you use the HAVING clause, the Oracle server restricts groups as follows:
1. Rows are grouped.
2. The group function is applied.
3. Groups matching the HAVING clause are displayed.
![Page 23: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/23.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 23
SELECT department_id, MAX(salary)FROM employeesGROUP BY department_idHAVING MAX(salary)>10000 ;
Using the HAVING Clause
![Page 24: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/24.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 24
SELECT job_id, SUM(salary) PAYROLLFROM employeesWHERE job_id NOT LIKE '%REP%'GROUP BY job_idHAVING SUM(salary) > 13000ORDER BY SUM(salary);
Using the HAVING Clause
![Page 25: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/25.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 25
Lesson Agenda
• Group functions:– Types and syntax– Use AVG, SUM, MIN, MAX, COUNT– Use DISTINCT keyword within group functions– NULL values in a group function
• Grouping rows:– GROUP BY clause– HAVING clause
• Nesting group functions
![Page 26: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/26.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 26
SELECT MAX(AVG(salary))FROM employeesGROUP BY department_id;
Nesting Group Functions
Display the maximum average salary:
![Page 27: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/27.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 27
SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];
Summary
In this lesson, you should have learned how to:
• Use the group functions COUNT, MAX, MIN, SUM, and AVG• Write queries that use the GROUP BY clause
• Write queries that use the HAVING clause
![Page 28: 5 Copyright © 2007, Oracle. All rights reserved. Reporting Aggregated Data Using the Group Functions.](https://reader030.fdocuments.us/reader030/viewer/2022032703/56649cfa5503460f949cbc41/html5/thumbnails/28.jpg)
Copyright © 2007, Oracle. All rights reserved.5 - 28
Practice 5: Overview
This practice covers the following topics:
• Writing queries that use the group functions
• Grouping by rows to achieve more than one result
• Restricting groups by using the HAVING clause