sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué Oracle dice que no es una expresión GROUP BY?

Esto te sucede solo porque MySQL rompe la lógica de SQL.

Digamos que tenemos tabla emp:

id ename dept
1  mark  10
2  John  10
3  Mary  10
4  Jane  20

y la consulta:

select dept, ename
from emp 
group by dept;

¿obtendrás qué? Deberías obtener dos líneas, porque hay dos departamentos, pero la consulta solicita un nombre. Para el 20 esta claro pero para el 10 el motor debe devolver que?

Debería devolver un error. No puedo adivinar qué nombre dar. Oracle dispara un error:su error, pero MySQL obtiene un nombre (no se garantiza cuál). Eso es engañoso y puede generar errores.

Las consultas correctas serían:

select dept, max(ename) --the latest, alaphabeticaly
from emp 
group by dept;

y

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

Después de corregir esta parte, deberá resolver el

COUNT(*) over() AS rowcount

parte. En Oracle, AFAIK, no puede mezclar funciones analíticas con agrupar por consultas.