В GROUP BY мы можем ссылаться на столбец родительского запроса? - PullRequest
1 голос
/ 04 января 2012

Если да, первый запрос ниже должен быть правильным, но показывает ошибку ORA-00979: не выражение GROUP BY. Если нет, третий запрос также должен выдать ошибку ...

 SELECT   POSSIBLE.ENAME, POSSIBLE.DEPTNO, POSSIBLE.SAL
 FROM     EMP POSSIBLE
 WHERE    SAL >
   (SELECT   AVG (SAL)
    FROM     EMP AVERAGE group by possible.deptno having
        POSSIBLE.DEPTNO = AVERAGE.DEPTNO) ;

 SELECT   POSSIBLE.ENAME, POSSIBLE.DEPTno, POSSIBLE.SAL
 FROM     EMP POSSIBLE
 WHERE    SAL >
   (SELECT   AVG (SAL)
    FROM     EMP AVERAGE group by average.deptno having
        POSSIBLE.DEPTno = AVERAGE.DEPTno) ;

 SELECT   POSSIBLE.ENAME, POSSIBLE.DEPTNO, POSSIBLE.SAL
 FROM     EMP POSSIBLE
 WHERE    SAL >
   (SELECT   AVG (SAL)
    FROM     EMP AVERAGE group by possible.deptno) ;

Ответы [ 2 ]

3 голосов
/ 04 января 2012

Ваш первый запрос должен использовать WHERE, а не HAVING.Предложение HAVING используется для фильтрации на основе агрегированных (т.е. не групповых) значений, а не для фильтрации строк, участвующих в группировке.

Кроме того, вам даже не нужно группировать в первомзапрос.

SELECT   POSSIBLE.ENAME, POSSIBLE.DEPTNO, POSSIBLE.SAL
 FROM     EMP POSSIBLE
 WHERE    SAL >
   (SELECT   AVG (SAL)
    FROM     EMP AVERAGE WHERE
        POSSIBLE.DEPTNO = AVERAGE.DEPTNO) ;
1 голос
/ 04 января 2012
SELECT   POSSIBLE.ENAME, POSSIBLE.DEPTNO, POSSIBLE.SAL  FROM     EMP POSSIBLE  WHERE    SAL >    (SELECT   AVG (SAL)
    FROM     EMP AVERAGE group by possible.deptno having
        POSSIBLE.DEPTNO = AVERAGE.DEPTNO) ;

Я думаю, что ошибка ORA-00979: не GROUP BY ссылается на AVERAGE.DEPTNO в предложении has во внутреннем запросе

...