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.