Я получаю ORA-00979 по следующему запросу:
SELECT cr.review_sk, cr.cs_sk, cr.full_name,
tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt",
cs.cs_id, cr.tracking_number
from review cr, cs, fact cf
where cr.cs_sk = cs.cs_sk
and UPPER(cs.cs_id) like '%' || UPPER(i_cs_id) || '%'
and row_delete_date_time is null
and cr.review_sk = cf.review_wk (+)
and cr.fact_type_code (+) = 183050
GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number
ORDER BY cs.cs_id, cr.full_name;
Я не смог найти ни одного примера с предложениями GROUP BY и ORDER BY в одном запросе. Я пытался удалить каждое поле из группы по одному, но все еще получаю ту же ошибку.
Включите в
GROUP BY
предложение всеSELECT
выражения, которые не являются аргументами групповой функции.источник
Жаль, что у Oracle есть ограничения, подобные этим. Конечно, результат для столбца, не входящего в GROUP BY, будет случайным, но иногда вы этого хотите. Глупый Oracle, вы можете сделать это в MySQL / MSSQL.
НО есть обходной путь для Oracle:
Пока следующая строка не работает
Вы можете обмануть Oracle с некоторыми нулями, как показано ниже, чтобы сохранить ваш столбец в области видимости, но не группировать по нему (предполагая, что это числа, в противном случае используйте CONCAT)
источник
Если группировка в силу в том числе
GROUP BY
пункт, любое выражениеSELECT
, которое не является функцией группы (или агрегатной функции или агрегированных колонки) , такие какCOUNT
,AVG
,MIN
,MAX
,SUM
и так далее ( список агрегатных функций ) должны присутствовать вGROUP BY
статье.Пример (правильный путь) (здесь
employee_id
это не групповая функция (неагрегированный столбец), поэтому она должна отображаться вGROUP BY
. Напротив, сумма (зарплата) является групповой функцией (агрегированный столбец), поэтому ее не требуется отображать вGROUP BY
предложении ,Пример (неверный путь) (здесь
employee_id
не групповая функция, и она не появляется вGROUP BY
предложении, что приведет к ошибке ORA-00979.Для исправления необходимо выполнить одно из следующих действий:
SELECT
пункте вGROUP BY
предложенииSELECT
предложения.источник
Вы должны сделать следующее:
источник
Та же ошибка возникает и тогда, когда ключевое слово UPPER или LOWER не используется в обоих местах в выражении выбора и в группе по выражению.
Неправильно :-
Правильно :-
источник
Группировка по используется для агрегирования некоторых данных, в зависимости от функции агрегирования, и помимо этого вам нужно поместить столбец или столбцы, в которые нужно группировать данные.
например:
Это приведет к максимальной зарплате отделов.
Теперь, если мы опускаем предложение
d.deptno
from group by, это выдаст ту же ошибку.источник
В дополнение к другим ответам, эта ошибка может возникнуть, если есть несоответствие в предложении order by. Например:
источник