Ошибка с ORDER BY, используемой с предложением HAVING - PullRequest
2 голосов
/ 20 сентября 2011

Я пытаюсь использовать некоторые основные функции SQL. Мне нужно получить среднее значение некоторых данных и упорядочить их в порядке убывания. Я получаю сообщение об ошибке: «Групповая функция не разрешена»

Таблица:

STUDENTS
-----------
ID
CLASS
GRADE
ROOM

SQL:

    SELECT ID, class, AVG(Grade) AS AvgGrade
      FROM Students
     GROUP BY AVG(Grade)
    HAVING AVG(Grade) >= 3.0
     ORDER BY AVG(Grade) DESC

Мне сказали, что ORDER BY нельзя использовать с предложением HAVING, и мне нужно будет повторить функцию. Любая помощь?

Ответы [ 3 ]

5 голосов
/ 20 сентября 2011

GROUP BY avg(Grade) не имеет никакого смысла.

Выражение GROUP BY определяет группы, к которым вы хотите применить агрегат.

Предположительно, вам нужно GROUP BY ID, class

4 голосов
/ 20 сентября 2011

Вы не можете иметь avg(Grade) в GROUP BY.

. В вашем примере вы должны иметь: GROUP BY ID, class.

0 голосов
/ 21 сентября 2011

В стандартном SQL только предложения AS ("псевдонимы столбцов") из предложения SELECT допускаются в предложении ORDER BY, т. Е.

SELECT ID, class, AVG(Grade) AS AvgGrade
  FROM Students
 GROUP BY ID, class
HAVING AVG(Grade) >= 3.0
 ORDER BY AvgGrade DESC;

Не все продукты SQL добросовестно реализуют стандарты,конечно, но вышесказанное должно работать, например, в SQL Server.

...