sql >> Databáze >  >> RDS >> Oracle

Proč Oracle říká, že nejde o výraz GROUP BY?

To se vám stane jen proto, že MySQL porušuje logiku SQL.

Řekněme, že máme tabulku emp:

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

a dotaz:

select dept, ename
from emp 
group by dept;

dostanete co? Měli byste dostat dva řádky, protože existují dvě oddělení, ale dotaz se ptá na jméno. Za 20 je jasný ale za 10 by měl motor vrátit co?

Mělo by to vrátit chybu. Nemohu odhadnout, jaké jméno dát.Oracle střílel chybu – vaše chyba, ale MySQL dostane jméno (které není zaručeno). To je zavádějící a může způsobit chyby.

Správné dotazy by byly:

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

a

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

Po opravě této části budete muset vyřešit problém

COUNT(*) over() AS rowcount

část. V oracle, AFAIK, nemůžete kombinovat analytické funkce se skupinami podle dotazů.



  1. Ztratilo se připojení k serveru MySQL při „čtení počátečního komunikačního paketu“, systémová chyba:0

  2. porovnejte výsledek s jinou tabulkou mysql

  3. Zhroucení MySQL Innodb

  4. Python a MySQLdb - Zdá se, že použití DROP TABLE IF EXISTS vyvolává výjimku