Cum funcționează
Tiparul canonic e la tabelul Carti. Cerința d) e cea instructivă,
prin contrast cu o problemă anterioară.
d) MAX fără GROUP BY şi fără subinterogare
SELECT MAX(Euro) FROM CursV;
Enunțul cere doar valoarea, nu şi data la care a fost înregistrată. Asta simplifică enorm: o
funcţie de agregare fără GROUP BY calculează pe tot tabelul şi întoarce un singur număr — 4.5196.
Compară cu tabelul Date_meteo, unde se cerea data
la care apare temperatura minimă. Acolo a fost nevoie de o subinterogare, pentru că MIN comprimă
rândurile şi pierde informaţia despre care rând a produs valoarea.
Regula de reţinut:
| Enunțul cere |
Soluţia |
| doar valoarea extremă |
SELECT MAX(col) FROM tabel; |
| şi rândul / data / numele |
subinterogare sau ORDER BY ... LIMIT 1 |
Dacă ai vrea totuşi şi data:
SELECT Data, Euro FROM CursV WHERE Euro = (SELECT MAX(Euro) FROM CursV);
DECIMAL(5,4) — patru zecimale
Cursurile valutare au 4 zecimale, deci (N,5.4) înseamnă 5 cifre în total, dintre care 4 după
virgulă: 4.4986. Este cel mai „fin" tip din toate subiectele — la preţuri se folosea
DECIMAL(6,2).
Precizia contează: la cursuri valutare, a patra zecimală chiar face diferenţa în calcule mari, iar
un tip real obişnuit ar introduce erori de rotunjire.
c) Filtrare pe lună + ordonare
Datele sunt introduse în ordine descrescătoare (6 martie primul), iar enunțul cere crescător — deci
ORDER BY chiar schimbă rezultatul, nu e decorativ. Rezultat: 3, 4, 5, 6 martie. Cele două zile din
februarie sunt excluse.
Greșeli frecvente
- Subinterogare inutilă la d) — nu se cere data, deci
MAX simplu e suficient.
SELECT Data, MAX(Euro) — dacă tot adaugi data, ai nevoie de subinterogare; altfel data
afişată nu corespunde maximului.
MAX pe coloana greşită — enunțul cere euro, nu dolar.
- Intervalul de la
'2014-03-01' la '2014-03-30' — se pierde ultima zi a lunii.
ORDER BY uitat — datele ies în ordinea inserării, adică descrescător.