Что является причиной для ORA-00979 на оракуле 11g - PullRequest
1 голос
/ 26 сентября 2019

Пытаясь понять использование GROUP BY в SQL

Я несколько раз пересекался с этой ошибкой, и я не смог определить ядро, чтобы решить ее в дальнейшем.

SELECT d.department_name
FROM departments d
JOIN employees e
ON (d.department_id = e.department_id)
GROUP BY d.department_name
HAVING (SELECT COUNT(*) FROM employees) > 5
AND e.commission_pct IS NOT NULL;
ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:
Error at Line: 7 Column: 5

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Наличие должно иметь столбцы, которые находятся в группе Это способ его построения.Таким образом, наличие позволяет вам агрегировать или манипулировать столбцами группы по.Причина, по которой вы получили группу по ошибке, заключается в том, что вы использовали подзапрос вместо столбца group by или агрегата.

Короче говоря, наличие аналогично тому, где, но только то, что позволяет фильтровать записи группыв отличие от того, где используется для фильтрации записей самой таблицы

    SELECT d.department_name
   FROM departments d
    JOIN employees e
    ON (d.department_id = 
      e.department_id)
     Where
      e.commission_pct IS NOT NULL
   GROUP BY d.department_name
    HAVING  COUNT(*) > 5
   ;
1 голос
/ 26 сентября 2019

Ваш синтаксис неправильный, условие должно быть в предложении where и не должно повторно выбирать значения

 SELECT d.department_name
 FROM departments d
 JOIN employees e
 ON (d.department_id = e.department_id)
 WHERE e.commission_pct IS NOT NULL
 GROUP BY d.department_name
 HAVING COUNT(*)  > 5 ;

См. больше примеров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...