Oracle
 sql >> Database >  >> RDS >> Oracle

Perché Oracle sta dicendo non un'espressione GROUP BY?

Ti succede solo perché MySQL rompe la logica di SQL.

Diciamo che abbiamo table emp:

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

e la domanda:

select dept, ename
from emp 
group by dept;

otterrai cosa? Dovresti ottenere due righe, perché ci sono due dipartimenti, ma la query richiede ename. Per 20 è chiaro ma per 10 il motore dovrebbe restituire cosa?

Dovrebbe restituire un errore. Non riesco a indovinare quale nome dare. Oracle genera un errore:il tuo errore, ma MySQL ottiene un nome (non garantito quale). Questo è fuorviante e potrebbe causare bug.

Le query corrette sarebbero:

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;

Dopo aver corretto questa parte, dovrai risolvere il

COUNT(*) over() AS rowcount

parte. In Oracle, AFAIK, non puoi combinare funzioni analitiche con query raggruppate per.