Основы программирования в СУБД Oracle. SQL+PL/SQL.. О. А. Ткачев

Чтение книги онлайн.

Читать онлайн книгу Основы программирования в СУБД Oracle. SQL+PL/SQL. - О. А. Ткачев страница 26

Основы программирования в СУБД Oracle. SQL+PL/SQL. - О. А. Ткачев

Скачать книгу

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 следует считать равным нулю, то следует использовать второй вариант запроса.

      Агрегатные функции нельзя использовать в предложении WHERE. Например, нельзя найти сотрудника с максимальной зарплатой, используя следующий запрос:

      Пример 4.6a. Найти сотрудника, получающего максимальную зарплату

      Внимание: ЭТОТ ЗАПРОС НЕ БУДЕТ ВЫПОЛНЕН!

      SELECT employee_id, salary

      FROM Employees

      WHERE salary = MAX (salary);

      Данную задачу можно решить следующим образом:

      Пример 4.6б. Найти сотрудника, получающего максимальную зарплату

      SELECT employee_id, salary AS maximum

      FROM Employees

      WHERE salary = (SELECT MAX (salary) FROM Employees);

      Данный запрос содержит в предложении WHERE подзапрос. Использование подзапросов будет рассмотрено позже.

      Группировка

      Чаще всего агрегатные функции используются в запросах с группировкой. В общем виде запрос с группировкой может быть представлен в следующем виде:

      SELECT {список столбцов*), {агрегатные функции}

      FROM

Скачать книгу