Cum funcționează
Enunțul cere ceva ce datele nu pot da
„Suma totală obținută din vânzarea biletelor" presupune două informații: prețul unui bilet și
câte bilete s-au vândut. Structura din enunț conține doar prima. Nu există nicio coloană
bilete_vandute, nici un tabel Vanzari.
Cu datele disponibile, singurul calcul posibil e suma prețurilor biletelor filmelor difuzate la
CineGold — adică încasarea în ipoteza că s-a vândut un bilet la fiecare film. Asta e răspunsul
așteptat, și merită scris explicit ca ipoteză, nu lăsat implicit.
Dacă baza de date ar fi avut coloana, interogarea corectă ar fi fost:
SELECT SUM(f.pret_bilet * f.bilete_vandute) AS total_incasat -- coloana nu exista in acest subiect
FROM Filme f INNER JOIN Cinematografe c ON f.idc = c.idc
WHERE c.denumire = 'CineGold';
Genul acesta de neconcordanță între enunț și structură apare des în subiectele de atestat. Reacția
corectă nu e să inventezi o coloană, ci să calculezi ce se poate cu datele existente și să spui ce
ipoteză ai făcut. Un corector vede că ai înțeles problema; un răspuns care folosește o coloană
inexistentă e pur și simplu greșit.
pret_bilet number(5) — fără zecimale
Notația number(5) înseamnă 5 cifre, niciuna zecimală. Deci prețurile sunt numere întregi
(45, nu 45.50), iar SUM dă un întreg. Dacă ar fi fost number(5,2), ar fi fost nevoie de
ROUND(..., 2), ca la problema #129.
a) DESC pe preț
ORDER BY pret_bilet DESC — de la cel mai scump la cel mai ieftin. Am adăugat pret_bilet în
SELECT, deși cerința cere doar titlurile: o listă sortată după o coloană invizibilă pare
nesortată.
Greșeli frecvente
- Inventarea unei coloane
bilete_vandute — interogarea nu rulează. Structura tabelului e dată în
enunț și nu se completează după nevoie.
SUM(pret_bilet) fără joncțiune — suma prețurilor tuturor filmelor din bază, nu doar de la
CineGold. Un număr plauzibil și greșit.
COUNT în loc de SUM — „suma obținută" e o sumă de bani, nu un număr de filme.
AVG în loc de SUM — răspunde la „prețul mediu", care e altă cerință (vezi
problema #149).
ORDER BY pret_bilet fără DESC — ordine crescătoare, exact inversul cerinței.
'Cinegold' cu g mic — în Oracle, SUM întoarce NULL.