sql >> Databasteknik >  >> RDS >> Oracle

Varför säger Oracle inte ett GROUP BY-uttryck?

Detta händer dig bara för att MySQL bryter logiken i SQL.

Låt oss säga att vi har table emp:

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

och frågan:

select dept, ename
from emp 
group by dept;

du får vad? Du bör få två rader, eftersom det finns två avdelningar, men frågan frågar efter ename. För 20 är klart men för 10 ska motorn returnera vad?

Det borde returnera ett fel. Kan inte gissa vilket ename man ska ge. Oracle skjuter ett fel - ditt fel, men MySQL får ett ename (inte garanterat vilket). Det är missvisande och kan leda till buggar.

Korrekta frågor skulle vara:

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

och

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

När du har rättat till den här delen måste du lösa problemet

COUNT(*) over() AS rowcount

del. I Oracle, AFAIK, kan du inte blanda analytiska funktioner med grupp efter frågor.



  1. Vad händer om jag dödar en stor MySQL InnoDb DELETE-fråga?

  2. Hur man blir av med STRICT SQL-läge i MySQL

  3. SQL För att kontrollera om rummet är ledigt mellan datumen

  4. SQL Server datumformat funktion