ORA-00979: не группа по выражению вопроса [дубликат]


На этот вопрос уже есть ответ здесь:

Я выполняю следующий запрос и получаю ошибку "ORA-00979: not A GROUP BY expression".

select distinct 
field1, 
field2, 
field3, 
count(*) as field4, 
field5, 
field6,
case
when smt1>0 then 'Deleted'
when smt2>0 then 'Impacted'
when smt3>0 then 'Unknown'
else 'Clean'
end as field7, 
field8, 
field9, 
field10,
field11, 
field12, 
field13
from (<here a big sub query>) A
group by field1, field2
order by field1, field2

Я знаю, что мне нужно поместить все столбцы SELECT в оператор GROUP BY, кроме функций группировки (таких как MAX или SUM), поэтому Я пытаюсь выполнить следующий запрос, но получаю одно и то же сообщение об ошибке:

select distinct 
field1, 
field2, 
field3, 
count(*) as field4, 
field5, 
field6,
case
when smt1>0 then 'Deleted'
when smt2>0 then 'Impacted'
when smt3>0 then 'Unknown'
else 'Clean'
end as field7, 
field8, 
field9, 
field10,
field11, 
field12, 
field13
from (<here a big sub query>) A
group by field1, field2, field3, field5, field6, field8, field9, field10, field11, field12, field13
order by field1, field2

Как я могу решить эту проблему, не меняя общий смысл запроса?

Большое вам спасибо., Мартин

2 2

2 ответа:

В вашем выражении group by отсутствует field7.

Также вы не можете использовать псевдоним в вашей группе по выражению того же запроса. Вам нужно добавить полный оператор CASE в вашу группу по выражению, чтобы включить field7.

Простое упоминание псевдонима невозможно в группе by, потому что Шаг SELECT является последним шагом для выполнения запроса, группировка происходит раньше, когда имена псевдонимов еще не определены.

Вам нужно добавить выражение

case
when smt1>0 then 'Deleted'
when smt2>0 then 'Impacted'
when smt3>0 then 'Unknown'
else 'Clean'
end

В ваше group by выражение.