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

Hvorfor siger Oracle ikke et GROUP BY-udtryk?

Dette sker for dig, bare fordi MySQL bryder logikken i SQL.

Lad os sige, at vi har table emp:

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

og forespørgslen:

select dept, ename
from emp 
group by dept;

får du hvad? Du bør få to linjer, fordi der er to afdelinger, men forespørgslen beder om ename. For 20 er klart, men for 10 bør motoren returnere hvad?

Det skal returnere en fejl. Kan ikke gætte hvilket ename man skal give. Oracle skyder en fejl - din fejl, men MySQL får et ename (ikke garanteret hvilket). Det er vildledende og kan forårsage fejl.

Korrekte forespørgsler ville være:

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

og

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

Når du har rettet denne del, bliver du nødt til at løse problemet

COUNT(*) over() AS rowcount

en del. I Oracle, AFAIK, kan du ikke blande analytiske funktioner med gruppe efter forespørgsler.



  1. Hvordan specificeres kolonnetyper for CTE (Common Table Expressions) i PostgreSQL?

  2. Konverter SQLite til JSON

  3. 5 måder at opdatere data med en underforespørgsel i Oracle SQL

  4. Oracle som løsning af muterende tabeller