Использование групповых функций

Содержание

Слайд 2

Objectives После завершения этого урока вы должны знать : Что такое

Objectives

После завершения этого урока вы должны знать :
Что такое групповые функции

и как их использовать
Как производить группировку с помощю GROUP BY
Как производить включение или исключение сгруппированных строк с помощью HAVING
Слайд 3

Что такое групповая функция? Групповые функции работают с наборами строк, чтобы

Что такое групповая функция?

Групповые функции работают с наборами строк, чтобы дать

один результат в каждой группе.

EMPLOYEES

Maximum salary in EMPLOYEES table


Слайд 4

Типы групповых функций AVG COUNT MAX MIN SUM …

Типы групповых функций

AVG
COUNT
MAX
MIN
SUM

Слайд 5

SELECT [column,] group_function(column), ... FROM table [WHERE condition] [GROUP BY column]

SELECT [column,] group_function(column), ...
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];

Функции Группа:

Синтаксис
Слайд 6

SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM employees WHERE job_id LIKE '%REP%';

SELECT AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%';

Использование функций AVG

и SUM

Вы можете использовать AVG и SUM для числовых данных.

Слайд 7

SELECT MIN(hire_date), MAX(hire_date) FROM employees; Использование функций MIN и MAX Вы

SELECT MIN(hire_date), MAX(hire_date)
FROM employees;

Использование функций MIN и MAX

Вы можете использовать MAX и MIN для типов
numeric,

character, date
Слайд 8

COUNT(*) возвращает количество строк в таблице : COUNT(expr) возвращает количество строк

COUNT(*) возвращает количество строк в таблице :
COUNT(expr) возвращает количество строк с

ненулевых значений для expr:

SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 80;

SELECT COUNT(*)
FROM employees
WHERE department_id = 50;

Использование COUNT функции

1

2

Слайд 9

SELECT COUNT(DISTINCT department_id) FROM employees; Использование DISTINCT COUNT(DISTINCT expr) возвращает число

SELECT COUNT(DISTINCT department_id)
FROM employees;

Использование DISTINCT

COUNT(DISTINCT expr) возвращает число различных ненулевых значениях

expr.
Для того, чтобы отобразить количество различных значений отдела в таблице EMPLOYEES :
Слайд 10

Групповые функции игнорируют столбцы со значением null : Функция NVL позволяет

Групповые функции игнорируют столбцы со значением null :
Функция NVL позволяет включать

нулевые значения:

SELECT AVG(commission_pct)
FROM employees;

SELECT AVG(NVL(commission_pct, 0))
FROM employees;

Групповые функции и значения Null

1

2

Слайд 11

Создание групп данных EMPLOYEES … Average salary in EMPLOYEES table for each department

Создание групп данных

EMPLOYEES


Average salary in
EMPLOYEES table for each
department

Слайд 12

Вы можете разделить строки в таблице на более мелкие группы при


Вы можете разделить строки в таблице на более мелкие группы при

помощи предложения GROUP BY.

Создание групп данных: Синтаксис предложения GROUP BY

SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];

Слайд 13

SELECT department_id, AVG(salary) FROM employees GROUP BY department_id ; Использование предложения

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;

Использование предложения GROUP BY

Все столбцы

в списке выбора, к которым не применяются групповые функции должны быть описаны в предложении GROUP BY.
Слайд 14

Использование предложения GROUP BY Столбец в GROUP не обязательно должен находиться

Использование предложения GROUP BY

Столбец в GROUP не обязательно должен находиться в

SELECT .

SELECT AVG(salary)
FROM employees
GROUP BY department_id ;

Слайд 15

Группировка по нескольким столбцам EMPLOYEES Add the salaries in the EMPLOYEES

Группировка по нескольким столбцам

EMPLOYEES

Add the
salaries in
the EMPLOYEES
table for each

job, grouped by department


Слайд 16

SELECT department_id dept_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id

SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id ;

Использование GROUP

BY на несколько колонок
Слайд 17

Некорректные Запросы Использование групповых функций Любой столбец или выражение в списке

Некорректные Запросы Использование групповых функций

Любой столбец или выражение в списке SELECT,

который не является агрегатной функцией должен быть описан в предложении GROUP BY:

SELECT department_id, COUNT(last_name)
FROM employees;

SELECT department_id, COUNT(last_name)
*
ERROR at line 1:
ORA-00937: not a single-group group function

Колонка отсутствуют в списке предложения GROUP BY

Слайд 18

Вы не можете использовать групповые функции в WHERE. Для этой цели

Вы не можете использовать групповые функции в WHERE.
Для этой цели используйте

HAVING.

SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;

WHERE AVG(salary) > 8000
*
ERROR at line 3:
ORA-00934: group function is not allowed here

Cannot use the WHERE clause to restrict groups

Некорректные Запросы Использование групповых функций

Слайд 19

Ограничение результатов группировки EMPLOYEES … The maximum salary per department when it is greater than $10,000

Ограничение результатов группировки

EMPLOYEES


The maximum salary per department
when it is
greater than $10,000

Слайд 20

SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING

SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];

Ограничение результатов

группировки с использованием HAVING

При использовании предложения HAVING, сервер Oracle ограничивает группы следующим образом:
1. Строки сгруппированы.
2. Применяется групповая функция.
3. Отображаются группы, соответствующие предложения HAVING.

Слайд 21

SELECT department_id, MAX(salary) FROM employees GROUP BY department_id HAVING MAX(salary)>10000 ; Использование предложения HAVING

SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;

Использование предложения HAVING

Слайд 22

SELECT job_id, SUM(salary) PAYROLL FROM employees WHERE job_id NOT LIKE '%REP%'

SELECT job_id, SUM(salary) PAYROLL
FROM employees
WHERE job_id NOT LIKE '%REP%'
GROUP BY job_id
HAVING

SUM(salary) > 13000
ORDER BY SUM(salary);

Использование предложения HAVING

Слайд 23

SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id; Nesting Group Functions Отображение максимальной средней заработной платы:

SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;

Nesting Group Functions

Отображение максимальной средней заработной платы:

Слайд 24

SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING

SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];

Summary

Вы научились:
Использовать

групповые функции COUNT, MAX, MIN и AVG
Писать запросы, которые используют GROUP BY
Писать запросы, которые используют HAVING
Слайд 25

Practice 4: Overview This practice covers the following topics: Writing queries

Practice 4: 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
Слайд 26

Слайд 27

Количество сотрудников по департаментам. Оставить только департаменты с средней ЗП >

Количество сотрудников по департаментам.
Оставить только департаменты с средней ЗП >

7000
2. Количество уникальных JOB_ID в разрезе департаментов
3. Вывести одним запросом дату найма первого сотрудника
и дату найма последнего сотрудника в компании.
4. Вывести количество сотрудников, являющихся руководителями.
5.* Вывести среднюю ЗП руководителей.
6.* Размер 2 по величине ЗП.

* Задачки «на вырост». Темы мы еще не проходили. Можно погуглить «использование подзапросов»