Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Por que a Oracle está dizendo que não é uma expressão GROUP BY?


Isso acontece com você apenas porque o MySQL quebra a lógica do SQL.

Digamos que temos a tabela emp:
id ename dept
1  mark  10
2  John  10
3  Mary  10
4  Jane  20

e a consulta:
select dept, ename
from emp 
group by dept;

você vai conseguir o que? Você deve pegar duas linhas, porque são dois departamentos, mas a consulta pede ename. Para 20 é claro mas para 10 o motor deve retornar o que?

Deve retornar um erro. Não consigo adivinhar qual ename dar.Oracle dispara um erro - seu erro, mas o MySQL recebe um ename (não garantido qual). Isso é enganoso e pode conduzir bugs.

As consultas corretas seriam:
select dept, max(ename) --the latest, alaphabeticaly
from emp 
group by dept;

e
--all enames and groups
select dept, ename 
from emp 
group by dept, ename;

Depois de corrigir esta parte, você terá que resolver o
COUNT(*) over() AS rowcount

papel. No oracle, AFAIK, você não pode misturar funções analíticas com agrupar por consultas.