Cum funcționează
a) „Mai mare de 150” — strict
Un film de exact 150 de minute nu intră. „Mai mare de" înseamnă >; pentru >= enunțul ar fi
spus „de cel puțin 150" sau „de 150 sau mai mult".
Subiectele conțin aproape întotdeauna o valoare exact pe prag, ca să se vadă dacă ai citit atent.
Tabelul complet al formulărilor e la
problema #130.
b) AVG peste o categorie
AVG(pret_bilet) cu WHERE gen = 'Drama': WHERE păstrează doar filmele de dramă, AVG face media
prețurilor lor. Pe datele de test: (42 + 35 + 40) / 3 = 39.
AVG împarte la numărul de rânduri care au valoare. Un film cu prețul necompletat nu intră nici
la numărător, nici la numitor — deci AVG nu e SUM(x) / COUNT(*).
ROUND(..., 2) e reflexul corect la orice medie: AVG produce de obicei zecimale infinite. Aici
media iese exact 39, dar aceeași interogare pe alte date ar da 38.666666....
„Dramă” în enunț, Drama în tabel
Enunțul scrie genul cu diacritic — „Dramă". Dacă în tabel valoarea e Drama, condiția
WHERE gen = 'Dramă' întoarce zero rânduri, AVG întoarce NULL, și nu apare nicio eroare.
Scrie condiția ca valoarea din tabel. Dacă nu poți verifica datele, varianta care merge în ambele
cazuri:
WHERE gen LIKE 'Dram%'
Aceeași capcană, pe orașe, la #132 și
#146.
Greșeli frecvente
>= în loc de > — intră și filmul de exact 150 de minute.
'Dramă' cu diacritic, când în tabel e Drama — AVG întoarce NULL, care se citește ușor ca
„nu există filme de dramă".
SUM în loc de AVG — „prețul mediu" e o medie, nu un total.
AVG fără WHERE — media pe toate filmele, nu doar pe cele de dramă. Un număr apropiat, deci
greu de observat.
ROUND uitat — afișezi 38.66666666666667 într-o coloană de preț.
ORDER BY uitat la a) — nu era cerut, dar o listă de durate nesortată e greu de citit. (Nu se
depunctează.)