sql >> Database >  >> RDS >> Oracle

Waarom zegt Oracle geen GROUP BY-expressie?

Dit overkomt je alleen maar omdat MySQL de logica van SQL doorbreekt.

Laten we zeggen dat we tafelmedewerker hebben:

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

en de vraag:

select dept, ename
from emp 
group by dept;

je krijgt wat? Je zou twee regels moeten krijgen, omdat er twee afdelingen zijn, maar de vraag vraagt ​​om ename. Voor 20 is duidelijk maar voor 10 moet de motor wat teruggeven?

Het zou een fout moeten retourneren. Kan niet raden welke ename je moet geven. Oracle maakt een fout - jouw fout, maar MySQL krijgt een ename (niet gegarandeerd welke). Dat is misleidend en kan bugs veroorzaken.

De juiste vragen zijn:

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

en

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

Nadat je dit onderdeel hebt gecorrigeerd, moet je de

COUNT(*) over() AS rowcount

een deel. In Oracle, AFAIK, kun je analytische functies niet combineren met groepsgewijs zoeken.



  1. Percona XtraDB-cluster bewaken - belangrijkste meetgegevens

  2. $variabele of $_POST-waarde invoegen in mysql-tabel

  3. Foutcode:1411. Onjuiste datetime-waarde:'0000-00-00' voor functie str_to_date

  4. Hoe een bestaande Postgres-tabel zo transparant mogelijk naar een gepartitioneerde tabel migreren?