Oracle
 sql >> Base de données >  >> RDS >> Oracle

Pourquoi Oracle ne dit pas une expression GROUP BY?

Cela vous arrive simplement parce que MySQL brise la logique de SQL.

Disons que nous avons la table emp :

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

et la requête :

select dept, ename
from emp 
group by dept;

vous obtiendrez quoi ? Vous devriez obtenir deux lignes, car il y a deux départements, mais la requête demande le nom. Pour 20 c'est clair mais pour 10 le moteur doit renvoyer quoi ?

Il devrait renvoyer une erreur. Impossible de deviner quel nom donner.Oracle tire une erreur - votre erreur, mais MySQL obtient un nom (ce qui n'est pas garanti).C'est trompeur et peut entraîner des bogues.

Les requêtes correctes seraient :

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

et

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

Après avoir corrigé cette partie, vous devrez résoudre le

COUNT(*) over() AS rowcount

partie. Dans oracle, autant que je sache, vous ne pouvez pas mélanger les fonctions analytiques avec les requêtes group by.