Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum sagt Oracle keinen GROUP BY-Ausdruck?

Das passiert Ihnen nur, weil MySQL die Logik von SQL bricht.

Nehmen wir an, wir haben Tabelle emp:

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

und die Abfrage:

select dept, ename
from emp 
group by dept;

Bekommst du was? Du solltest zwei Zeilen bekommen, weil es zwei Abteilungen gibt, aber die Abfrage fragt nach E-Namen. Für 20 ist klar, aber für 10 soll der Motor was zurückgeben?

Es sollte einen Fehler zurückgeben. Ich kann nicht erraten, welchen E-Namen ich geben soll. Oracle gibt einen Fehler aus - Ihr Fehler, aber MySQL erhält einen E-Namen (nicht garantiert welcher). Das ist irreführend und kann zu Fehlern führen.

Korrekte Abfragen wären:

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

und

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

Nachdem Sie diesen Teil korrigiert haben, müssen Sie das Problem

lösen
COUNT(*) over() AS rowcount

Teil. In Oracle, AFAIK, können Sie Analysefunktionen nicht mit Group-by-Abfragen mischen.