Operatorul caz, coalesce, nullif, pagina 3

Calculează numărul total de zboruri de la Rostov și numărul de zboruri, destinația căruia nu este Moscova.

În această sarcină, de asemenea, trebuie să efectuați agregarea pe două eșantioane, una dintre mostre fiind un subset al celui de-al doilea. Prin urmare, coloana calculată, prin care puteți efectua gruparea, nu se potrivește direct aici. Aceasta a fost potrivită pentru rezolvarea problemei anterioare, când setul a fost împărțit în propriile subseturi disjuncte, pentru fiecare dintre care era necesar să efectueze agregarea.







Pentru a rezolva această problemă, putem calcula numărul întregului set și folosim un subquery pentru a calcula valorile din subset (cea de-a doua referință la tabel) sau folosim CASE împreună cu funcția agregată pentru a evita re-citirea tabelului. Să vedem cum optimizatorul evaluează aceste opțiuni.







Folosind o Subchetare

Utilizând CASE cu o funcție agregată

Rezultatul, desigur, va fi același:


dar costul celei de-a doua cereri, așa cum era de așteptat, a fost de jumătate.

Puteți compara timpul real de execuție dacă generați o cantitate suficientă de date.

A doua opțiune poate fi scrisă mai compact dacă utilizați funcția NULLIF - o versiune prescurtată a cazului particular de utilizare a CASE:

Funcția NULLIF returnează NULL dacă argumentele ei sunt egale sau primul argument altfel.

Soluția folosește faptul că funcțiile agregate nu iau în considerare valorile NULL care apar în argumentul funcției COUNT atunci când orașul de sosire este egal cu "Moscova".

Anterior [Conversia de tip și operatorul CAST]

[Operatori de modificare a datelor] Următor

Tutorialul a fost actualizat
acum câteva zile







Trimiteți-le prietenilor: