Основы программирования в СУБД Oracle. SQL+PL/SQL. - страница 40

Шрифт
Интервал


– COUNT (salary) возвращает число сотрудников, получающих зарплату, у которых значение столбца salary не NULL;

– COUNT (*) возвращает число всех сотрудников.

Этот запрос не учитывает то, что некоторые сотрудники получают комиссионные. Зарплата сотрудника с учетом комиссионных может быть вычислена путем использования выражения:


salary * (1 + NVL (commission_pct,0))


Используя это выражение в предыдущем запросе, вместо столбца salary получим:


Пример 4.2. Вывод обобщенных данных о зарплате сотрудников с учетом комиссионных


SELECT MIN (salary* (1+NVL (commission_pct,0))) AS minimum,

MAX (salary* (1+NVL (commission_pct,0))) AS maximum,

ROUND (AVG (salary* (1+NVL (commission_pct,0)))) AS medium,

SUM (salary* (1+NVL (commission_pct,0))) As summa,

COUNT (salary* (1+NVL (commission_pct,0))) AS ′′COUNT (expr) ′′,

COUNT (*)

FROM Employees;



Пример 4.3. Использование функции COUNT


SELECT COUNT (*), COUNT (salary),COUNT (DISTINCT salary),

COUNT (commission_pct)

FROM Employees

WHERE department_id =80;



Анализ результатов этого запроса:

– COUNT (*) – вернула число сотрудников в отделе 80;


– COUNT (salary) – вернула число сотрудников в отделе 80,

у которых значение столбца salary не NULL;


– COUNT (DISTINCT salary) – вернула число различных значений в столбце salary;


– COUNT (commission_pct) – вернула число сотрудников в отделе 80, у которых значение столбца commission_pct не NULL.


Оператор DISTINCT используется для исключения повторяющихся значений. Например, необходимо определить количество должностей. Запрос без оператора DISTINCT вернет количество сотрудников, у которых значение столбца job_id не NULL.


Пример 4.4. Количество сотрудников, у которых значение столбца job_id не NULL


SELECT COUNT (job_id)

FROM Employees;



Если в аргумент функции COUNT добавить оператор DISTINCT, то будут исключены повторяющиеся значения столбца job_id и запрос вернет количество должностей (количество уникальных значений столбца job_id).


Пример 4.5. Количество уникальных значений столбца job_id


SELECT COUNT (DISTINCT job_id)

FROM Employees;



Задача: требуется определить средний размер комиссионных. Рассмотрим два варианта решения этой задачи.


Вариант 1


SELECT AVG (commission_pct)

FROM Employees;


Вариант 2.


SELECT AVG (NVL (commission_pct, 0))

FROM Employees;


Здесь правильный вариант решения не очевиден. У значительной части сотрудников значение столбца commission_pct имеет значение NULL. Если этим сотрудникам комиссионные не положены и они не должны учитываться, то правильным будет первый вариант. Если значение NULL следует считать равным нулю, то следует использовать второй вариант запроса.