Estou recebendo o ORA-00979 com a seguinte consulta:
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;
Não consegui encontrar nenhum exemplo que tivesse as cláusulas GROUP BY e ORDER BY na mesma consulta. Tentei remover cada campo do grupo um por vez, mas ainda estou recebendo o mesmo erro.
Inclua na
GROUP BY
cláusula todas asSELECT
expressões que não são argumentos de função de grupo.fonte
Pena que o Oracle tenha limitações como estas. Claro, o resultado para uma coluna que não esteja no GROUP BY seria aleatório, mas às vezes você deseja isso. Oracle bobo, você pode fazer isso no MySQL / MSSQL.
MAS existe uma solução alternativa para o Oracle:
Embora a seguinte linha não funcione
Você pode enganar o Oracle com alguns 0s como o seguinte, para manter sua coluna no escopo, mas não agrupá-la (assumindo que sejam números, caso contrário, use CONCAT)
fonte
Se você agrupar em virtude da inclusão de
GROUP BY
cláusula, qualquer expressão noSELECT
, que não é função de grupo (ou função de agregação ou coluna agregada), tais comoCOUNT
,AVG
,MIN
,MAX
,SUM
e assim por diante ( Lista de funções de agregação ) deve estar presente naGROUP BY
cláusula.Exemplo (maneira correta) (aqui
employee_id
não é função de grupo (coluna não agregada), portanto, ela deve aparecerGROUP BY
. Por outro lado, soma (salário) é uma função de grupo (coluna agregada), portanto, não é necessário que apareça naGROUP BY
cláusula .Exemplo (maneira incorreta) (aqui
employee_id
não é função de grupo e não aparece naGROUP BY
cláusula, que levará ao erro ORA-00979.Para corrigir, você deve executar um dos seguintes procedimentos:
SELECT
cláusula naGROUP BY
cláusulaSELECT
cláusulafonte
Você deve fazer o seguinte:
fonte
O mesmo erro também ocorre quando a palavra-chave UPPER ou LOWER não é usada em ambos os lugares na expressão selecionada e agrupada por expressão.
Errado: -
Certo :-
fonte
O grupo by é usado para agregar alguns dados, dependendo da função agregada, e outros que você precisa colocar coluna ou colunas nas quais você precisa do agrupamento.
por exemplo:
Isso resultará no salário máximo dos departamentos.
Agora, se omitirmos a
d.deptno
cláusula from group by, ocorrerá o mesmo erro.fonte
Além das outras respostas, esse erro pode ocorrer se houver uma inconsistência em uma cláusula order by. Por exemplo:
fonte