3.2.3.1. Агрегатные функции без использования фразы GROUP BY.
Если не используется фраза GROUP BY, то в перечень элементов_SELECT можно включать лишь агрегатные функции или выражения, содержащие такие функции. Другими словами, нельзя иметь в списке столбцы, не являющихся аргументами агрегатных функций.
Пример 12.
Выдать данные о блюде (Блюдо=10), указать количество ингредиентов и их суммарный вес:
SELECT COUNT(Продукт) as Количество, SUM(Вес) as Вес
Результат
|
|
Количество
|
Вес
|
5
|
360
| FROM Состав
WHERE Блюдо = 10;
При выполнении запроса
SELECT Блюдо, COUNT(Продукт), SUM(Вес)
FROM Состав
WHERE Блюдо = 10;
будет получено сообщение об ошибке:
Column 'Состав.Блюдо' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Это связано с тем, что агрегатная функция создает единственное значение из множества значений столбца-аргумента, а для "свободного" столбца должно быть выдано все множество его значений. Без специального указания (оно задается фразой GROUP BY) SQL не будет выяснять, одинаковы значения этого множества (как в данном примере, где Блюдо = 10) или различны (как было бы при отсутствии WHERE фразы). Поэтому подобный запрос отвергается системой.
Правда, никто не запрещает дать запрос
Do'stlaringiz bilan baham: |