- •Многострочные функции (Multiple-row Functions).
- •1. Многострочные функции.
- •1.1 Типы функций агрегирования.
- •1.2 Использование функций avg и sum.
- •1.3 Использование функций min и max.
- •1.4 Использование функции count.
- •1.5 Функции агрегирования и неопределённые значения.
- •2. Создание групп данных.
- •2.1 Предложение group by.
- •2.2 Группировка по нескольким столбцам
- •2.3 Недопустимые примеры использования функций агрегирования
- •3. Исключение групп
- •3.1 Использование предложения having
- •4. Вложенные функции агрегирования.
1.3 Использование функций min и max.
Функции MINиMAXможно использовать с числовыми данными, символьными данными и данными типа даты.
Пример 1
SELECT MIN(hire_date), MAX(hire_date)
FROM employees;
Результат:
MIN(HIRE_ |
MAX(HIRE_ |
17-JUN-87 |
21-APR-00 |
Пример 2
SELECT MIN(last_name), MAX(last_name)
FROM employees;
Результат:
MIN(LAST_NAME) |
MAX(LAST_NAME) |
Abel |
Zlotkey |
1.4 Использование функции count.
Используются 3 формата функции COUNT:
COUNT(*)
COUNT(expr)
COUNT(DISTINCT expr)
COUNT(*)– возвращает количество строк в таблице, которые удовлетворяют ограничениям, заданным в командеSELECT. При этом учитываются и строки-дубликаты и строки с неопределёнными значениями. Если командаSELECTвключает предложениеWHERE, COUNT(*)возвращает количество строк, удовлетворяющих условию в предложенииWHERE.
COUNT(expr)возвращает количество строк с определёнными значениями (не NULL), заданными выражениемexpr.
COUNT(DISTINCT expr)возвращает количество уникальных, определённых значений (не NULL) в столбце, заданном выражениемexpr.
Пример 1
SELECT COUNT(*)
FROM employees
WHERE department_id = 50;
Результат:
COUNT(*)
----------
45
Пример 2
SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 80;
Результат:
COUNT(COMMISSION_PCT)
---------------------
34
Пример 3
SELECT COUNT(*)
FROM employees;
Результат:
COUNT(*)
----------
107
Пример 4
SELECT COUNT(department_id)
FROM employees;
Результат:
COUNT(DEPARTMENT_ID)
--------------------
106
Пример 5
SELECT COUNT(DISTINCT department_id)
FROM employees;
Результат:
COUNT(DISTINCTDEPARTMENT_ID)
----------------------------
11
1.5 Функции агрегирования и неопределённые значения.
Все функции агрегирования, кроме COUNT(*), игнорируют неопределённые значения (NULL) в столбце.
Продемонстрируем на примере использование функции AVG.
SELECT AVG(commission_pct)
FROM employees;
Результат:
AVG(COMMISSION_PCT)
-------------------
.222857143
Здесь среднее вычисляется как частное от деления общей суммы комиссионных, выплаченных всем служащим,на количество служащих, получающих комиссионные.
SELECT AVG(nvl(commission_pct, 0))
FROM employees
Результат:
AVG(NVL(COMMISSION_PCT,0))
--------------------------
.072897196
Здесь среднее вычисляется как частное от деления общей суммы комиссионных, выплаченных всем служащим,на общее количество служащих в компании.
Функция NVLзаставляет функции агрегирования включать в обработку неопределённые значения.
2. Создание групп данных.
DEPARTMENT_ID |
SALARY | ||||||||||||||
90 |
24000 |
|
| ||||||||||||
90 |
17000 |
| |||||||||||||
90 |
17000 |
| |||||||||||||
60 |
9000 |
| |||||||||||||
60 |
6000 |
|
| ||||||||||||
60 |
4200 |
Средний оклад | |||||||||||||
50 |
5800 |
в таблице | |||||||||||||
50 |
3500 |
EMPLOYEES | |||||||||||||
50 |
3100 |
по каждому | |||||||||||||
50 |
2600 |
отделу | |||||||||||||
50 |
2500 |
| |||||||||||||
80 |
10500 |
| |||||||||||||
80 |
11000 |
| |||||||||||||
80 |
8600 |
| |||||||||||||
10 |
4400 |
|