Использование групповых функций
Objectives
Что такое групповая функция?
Типы групповых функций
Функции Группа: Синтаксис
Использование функций AVG и SUM
Использование функций MIN и MAX
Использование COUNT функции
Использование DISTINCT
Групповые функции и значения Null
Создание групп данных
Создание групп данных: Синтаксис предложения GROUP BY
Использование предложения GROUP BY
Использование предложения GROUP BY
Группировка по нескольким столбцам
Использование GROUP BY на несколько колонок
Некорректные Запросы Использование групповых функций
Ограничение результатов группировки
Ограничение результатов группировки с использованием HAVING
Использование предложения HAVING
Использование предложения HAVING
Nesting Group Functions
Summary
Practice 4: Overview
419.50K
Категория: Базы данныхБазы данных

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

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

Copyright © 2004, Oracle. All rights reserved.

2. Objectives

После завершения этого урока вы должны знать :
• Что такое групповые функции и как их
использовать
• Как производить группировку с помощю GROUP
BY
• Как производить включение или исключение
сгруппированных строк с помощью HAVING
4-2
Copyright © 2004, Oracle. All rights reserved.

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

Групповые функции работают с наборами строк,
чтобы дать один результат в каждой группе.
EMPLOYEES
Maximum salary in
EMPLOYEES table

4-3
Copyright © 2004, Oracle. All rights reserved.

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


4-4
AVG
COUNT
MAX
MIN
SUM

Group
functions
Copyright © 2004, Oracle. All rights reserved.

5. Функции Группа: Синтаксис

SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY
4-5
[column,] group_function(column), ...
table
condition]
column]
column];
Copyright © 2004, Oracle. All rights reserved.

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

Вы можете использовать AVG и SUM для числовых
данных.
SELECT AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM
employees
WHERE job_id LIKE '%REP%';
4-6
Copyright © 2004, Oracle. All rights reserved.

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

Вы можете использовать MAX и MIN для типов
numeric, character, date
SELECT MIN(hire_date), MAX(hire_date)
FROM
employees;
4-7
Copyright © 2004, Oracle. All rights reserved.

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

COUNT(*) возвращает количество строк в таблице :
SELECT COUNT(*)
FROM
employees
WHERE department_id = 50;
1
COUNT(expr) возвращает количество строк с
ненулевых значений для expr:
SELECT COUNT(commission_pct)
FROM
employees
WHERE department_id = 80;
2
4-8
Copyright © 2004, Oracle. All rights reserved.

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


COUNT(DISTINCT expr) возвращает число
различных ненулевых значениях expr.
Для того, чтобы отобразить количество
различных значений отдела в таблице
EMPLOYEES :
SELECT COUNT(DISTINCT department_id)
FROM
employees;
4-9
Copyright © 2004, Oracle. All rights reserved.

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

Групповые функции игнорируют столбцы со
значением null :
SELECT AVG(commission_pct)
FROM
employees;
1
Функция NVL позволяет включать нулевые
значения:
SELECT AVG(NVL(commission_pct, 0))
FROM
employees;
2
4-10
Copyright © 2004, Oracle. All rights reserved.

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

EMPLOYEES
4400
9500
3500
6400
Average
salary in
EMPLOYEES
table for each
department
10033

4-11
Copyright © 2004, Oracle. All rights reserved.

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

SELECT
column, group_function(column)
FROM
table
[WHERE
condition]
[GROUP BY group_by_expression]
[ORDER BY column];
Вы можете разделить строки в таблице на более
мелкие группы при помощи предложения GROUP BY.
4-12
Copyright © 2004, Oracle. All rights reserved.

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

Все столбцы в списке выбора, к которым не
применяются групповые функции должны быть
описаны в предложении GROUP BY.
SELECT
department_id, AVG(salary)
FROM
employees
GROUP BY department_id ;
4-13
Copyright © 2004, Oracle. All rights reserved.

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

Столбец в GROUP не обязательно должен
находиться в SELECT .
SELECT
AVG(salary)
FROM
employees
GROUP BY department_id ;
4-14
Copyright © 2004, Oracle. All rights reserved.

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

EMPLOYEES

4-15
Add the
salaries in
the EMPLOYEES
table for
each job,
grouped by
department
Copyright © 2004, Oracle. All rights reserved.

16. Использование GROUP BY на несколько колонок

Использование GROUP BY
несколько колонок
на
SELECT
department_id dept_id, job_id, SUM(salary)
FROM
employees
GROUP BY department_id, job_id ;
4-16
Copyright © 2004, Oracle. All rights reserved.

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
4-17
Copyright © 2004, Oracle. All rights reserved.

18.

Некорректные Запросы
Использование групповых функций
Вы не можете использовать групповые функции в WHERE.
Для этой цели используйте HAVING.
SELECT
FROM
WHERE
GROUP BY
department_id, AVG(salary)
employees
AVG(salary) > 8000
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
4-18
Copyright © 2004, Oracle. All rights reserved.

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

EMPLOYEES

4-19
The maximum
salary
per department
when it is
greater than
$10,000
Copyright © 2004, Oracle. All rights reserved.

20. Ограничение результатов группировки с использованием HAVING

При использовании предложения HAVING, сервер
Oracle ограничивает группы следующим образом:
1. Строки сгруппированы.
2. Применяется групповая функция.
3. Отображаются группы, соответствующие
предложения HAVING.
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
4-20
column, group_function
table
condition]
group_by_expression]
group_condition]
column];
Copyright © 2004, Oracle. All rights reserved.

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

SELECT
FROM
GROUP BY
HAVING
4-21
department_id, MAX(salary)
employees
department_id
MAX(salary)>10000 ;
Copyright © 2004, Oracle. All rights reserved.

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

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
4-22
job_id, SUM(salary) PAYROLL
employees
job_id NOT LIKE '%REP%'
job_id
SUM(salary) > 13000
SUM(salary);
Copyright © 2004, Oracle. All rights reserved.

23. Nesting Group Functions

Отображение максимальной средней заработной
платы:
SELECT
MAX(AVG(salary))
FROM
employees
GROUP BY department_id;
4-23
Copyright © 2004, Oracle. All rights reserved.

24. Summary

Вы научились:
Использовать групповые функции COUNT, MAX, MIN и AVG
Писать запросы, которые используют GROUP BY
Писать запросы, которые используют HAVING
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
4-24
column, group_function
table
condition]
group_by_expression]
group_condition]
column];
Copyright © 2004, Oracle. All rights reserved.

25. 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
4-25
Copyright © 2004, Oracle. All rights reserved.
English     Русский Правила