Одна из основных ошибок при применении предложения GROUP BY связана с попыткой указать в предложении GROUP BY атрибут, которого нет в списке SELECT.
Пример 63
Задание.
Сформировать запрос для вывода названий всех дисциплин, по которым средняя оценка меньше 4.
Решение:
SELECT NameSubject, ROUND(AVG(Mark),1)
FROM Progress P,Subject S
WHERE P.IDSubject=S.IDSubject
GROUP BY P.IDSubject
HAVING AVG(Mark)<4
Результат реализации запроса:
Server: Msg 8120
Column 'S.NameSubject' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Другая часто встречающаяся ошибка связана с тем, что в предложении SELECT указываются атрибуты, которые не являются параметрами группировки или агрегатной функции.
Пример 64
SELECT NameSubject, P.IDSubject, ROUND(AVG(Mark),1)
FROM Progress P,Subject S
WHERE P.IDSubject=S.IDSubject
GROUP BY P.IDSubject
HAVING AVG(Mark)<4
Результат реализации запроса:
Server: Msg 8120
Column 'S.NameSubject' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Выходом из положения может быть группировка как по атрибуту NameSubject, так и по IDSubject.