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

Содержание

Слайд 2

Цели

Изучить функции группировки
Научиться применять функции группировки
Группировать информацию с использованием секции GROUP BY
Ограничивать

Цели Изучить функции группировки Научиться применять функции группировки Группировать информацию с использованием
выборку сгруппированных строк секцией HAVING

Слайд 3

Функции группировки

Функции группировки работают с набором данных для получения единственного результата

Функции группировки Функции группировки работают с набором данных для получения единственного результата

Слайд 4

Функции группировки

AVG
COUNT
MAX
MIN
STDDEV
SUM
VARIANCE

Функции группировки AVG COUNT MAX MIN STDDEV SUM VARIANCE

Слайд 5

Синтаксис

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

Синтаксис SELECT [column,] group_function(column), ... FROM table [WHERE condition] [GROUP BY column] [ORDER BY column];
BY column];

Слайд 6

Функции AVG и SUM

SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)
FROM employees
WHERE job_id

Функции AVG и SUM SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM employees WHERE job_id LIKE '%REP%';
LIKE '%REP%';

Слайд 7

Функции MIN и MAX

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

Функции MIN и MAX SELECT MIN(hire_date), MAX(hire_date) FROM employees;

Слайд 8

Функция COUNT

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

SELECT COUNT(commission_pct)
FROM employees

Функция COUNT SELECT COUNT(*) FROM employees WHERE department_id = 50; SELECT COUNT(commission_pct)

WHERE department_id = 80;

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

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

Слайд 9

Ключевое слово DISTINCT

COUNT(DISTINCT expr) возвращает число уникальных not null строк
Отображение количества уникальных

Ключевое слово DISTINCT COUNT(DISTINCT expr) возвращает число уникальных not null строк Отображение
подразделений в табблице EMPLOYEES

SELECT COUNT(DISTINCT department_id)
FROM employees;

Слайд 10

Функции группировки и NULL значения

Функции группировки игнорируют NULL значения
Функция NVL заставляет функцию

Функции группировки и NULL значения Функции группировки игнорируют NULL значения Функция NVL
группировки использовать NULL значения

SELECT AVG(commission_pct) FROM employees;

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

Слайд 11

Группировка данных

Группировка данных

Слайд 12

Секция GROUP BY

Можно разделять строки в таблицах на группы используя секцию GROUP

Секция GROUP BY Можно разделять строки в таблицах на группы используя секцию
BY

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

Слайд 13

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

Все колонки в секции SELECT, к которым не применяется группировка, должны быть
в секции GROUP BY.

Секция GROUP BY

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

Слайд 14

Колонки, находящиеся в секции GROUP BY, не должны находиться в секции SELECT

Колонки, находящиеся в секции GROUP BY, не должны находиться в секции SELECT
без функции группировки.

Секция GROUP BY

SELECT AVG(salary)
FROM employees
GROUP BY department_id ;

Слайд 15

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

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

Слайд 16

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

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

Группировка по нескольким колонкам SELECT department_id dept_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id ;
department_id, job_id ;

Слайд 17

Часто встречаемые ошибки

Колнка, находящаяся в секции SELECT, не обернута групповой функцией и

Часто встречаемые ошибки Колнка, находящаяся в секции SELECT, не обернута групповой функцией
не находится в секции GROUP BY

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

Слайд 18

Часто встречаемые ошибки

Нельзя использовать секцию WHERE для ограничения сгруппированных строк
Используйте HAVING
Функцию группировки

Часто встречаемые ошибки Нельзя использовать секцию WHERE для ограничения сгруппированных строк Используйте
нельзя использовать в секции WHERE.

SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;
ERROR at line 3:
ORA-00934: group function is not allowed here

Слайд 19

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

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

Слайд 20

Секция HAVING

При использовании секции HAVING сервер ORACLE выполняет следующие шаги:
Группирует строки
Применяет функцию

Секция HAVING При использовании секции HAVING сервер ORACLE выполняет следующие шаги: Группирует
группировки
Сравнивает группы с ограничением в секции HAVING

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

Слайд 21

Секция HAVING

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;

Слайд 22

Секция HAVING

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

Секция HAVING SELECT job_id, SUM(salary) PAYROLL FROM employees WHERE job_id NOT LIKE

GROUP BY job_id
HAVING SUM(salary) > 13000
ORDER BY SUM(salary);