Недопустимые Запросы с Использованием Групповых Функций

Любой столбец или выражение в списке SELECT, который не является агрегатной функцией, должен быть в предложении GROUP BY:

Недопустимые Запросы с Использованием Групповых Функций

Всякий раз, когда Вы используете смесь отдельных элементов (DEPARTMENT_ID) и групповые функции (COUNT) в том же самом операторе SELECT, следует включать предложение GROUP BY, которое будет указывать отдельные элементы (в этом случае, DEPARTMENT_ID). Если предложение GROUP BY отсутствует, появляется сообщение об ошибке “not a single-group group function” и звездочка (*) указывает незаконный столбец. Можно исправить ошибку в первом примере на рисунке, добавляя предложение GROUP BY:

    SELECT department_id, count(last_name)
FROM employees
GROUP BY department_id;

Любой столбец или выражение в списке SELECT, который не находится в агрегатной функции, должен быть включен в предложение GROUP BY. Во втором примере на рисунке job_id не состоит в предложении GROUP BY и не используется групповой функцией, таким образом возникает ошибка “not a GROUP BY expression”. Можно исправить ошибку во втором примере рисунка, включая job_id в предложение GROUP BY.

    SELECT department_id, job_id, COUNT(last_name)
FROM employees
GROUP BY department_id, job_id;

Некорректные Запросы с Использованием Групповых Функций

  • Нельзя использовать предложение WHERE, чтобы ограничить группы.

  • Вы используете предложение HAVING для ограничения групп.

  • Нельзя использовать групповые функции в предложении WHERE.

Некорректные Запросы с Использованием Групповых Функций

Предложение WHERE не может использоваться, чтобы ограничить группы. Оператор SELECT в примере на рисунке приводит к ошибке, потому что он использует предложение WHERE, чтобы ограничить вывод средних зарплат теми отделами, у которых средняя зарплата больше чем $8,000.

Однако, можно исправить ошибку в примере при использовании предложения HAVING, чтобы ограничить группы:

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

Далее: Создание Тройных Соединений с Предложением ON

Смотрите также
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)