Cum funcționează
a) GROUP BY fără joncțiune — și aici COUNT(*) e corect
„Pentru fiecare platformă" cere GROUP BY platforma. Ambele coloane necesare (platforma, jocurile
de numărat) sunt în Jocuri, deci nu e nevoie de joncțiune.
Iar fără LEFT JOIN, COUNT(*) e alegerea corectă: nu există rânduri artificiale cu NULL, deci nu
apare capcana de la problema #128. Fiecare
rând numărat e un joc real.
Un efect de care merită să fii conștient: în rezultat apar doar platformele care au cel puțin un
joc. O platformă fără jocuri nu există în Jocuri, deci nu poate apărea. Dacă ar exista un tabel
Platforme, ar fi nevoie de LEFT JOIN din el.
b) BETWEEN include ambele capete
WHERE g.scor BETWEEN 80 AND 100
e identic cu:
WHERE g.scor >= 80 AND g.scor <= 100
BETWEEN e inclusiv la ambele capete — un joc cu scor exact 80 și unul cu exact 100 intră
amândouă. E exact ce cere enunțul („între 80 și 100"), dar merită știut, pentru că într-un subiect care
spune „strict între" BETWEEN ar fi greșit; atunci se scrie > 80 AND < 100.
Ordinea argumentelor nu e negociabilă: BETWEEN 100 AND 80 întoarce zero rânduri, fără eroare.
Serverul verifică „mai mare sau egal cu 100 și mai mic sau egal cu 80", condiție imposibilă. Cea
mai tăcută greșeală din toată sintaxa BETWEEN.
BETWEEN funcționează și pe date (BETWEEN DATE '2026-01-01' AND DATE '2026-12-31') și pe text
(BETWEEN 'A' AND 'M', ordine alfabetică).
Greșeli frecvente
BETWEEN 100 AND 80 — zero rânduri, fără nicio eroare. Valoarea mică se scrie prima.
BETWEEN folosit când enunțul spune „strict între" — include capetele, deci două rânduri în
plus.
GROUP BY uitat la a) — un singur număr, totalul jocurilor.
SELECT platforma, COUNT(*) fără GROUP BY — eroare în Oracle; în MySQL/SQLite, o platformă
arbitrară lângă totalul general.
WHERE scor > 80 AND scor < 100 la această cerință — pierzi jocurile cu exact 80 sau exact 100.
- Scorul uitat din
SELECT la b) — nu e cerut explicit, dar fără el nu se vede de ce e fiecare
rând în listă.