Home » Articole » Articole » Calculatoare » Programare » SQL » SQL: SELECT: GROUP BY – Focalizarea pe grupurile dorite

SQL: SELECT: GROUP BY – Focalizarea pe grupurile dorite

postat în: SQL 0

Știți clauza WHERE. Aceasta definește ce rânduri ale unui tabel vor face parte din setul de rezultate. Clauza HAVING are aceeași semnificație la nivel de grup. Acesta determină ce grupuri vor face parte din setul de rezultate.


-- HAVING completează GROUP BY
SELECT ...
FROM   ...
GROUP BY <columnname>
HAVING <having clause>; -- specificați un criteriu care poate fi aplicat grupurilor

Preluăm exclusiv familii cu mai mult de 1 membru:


SELECT lastname
FROM   person
GROUP BY lastname    -- gruparea peste nume de familie
HAVING count(*) > 1; -- mai mult de o persoană în cadrul grupului

Toate familiile cu un membru nu mai fac parte din rezultat.

Într-un al doilea exemplu, ne concentrăm pe astfel de grupuri care îndeplinesc un criteriu privind coloana firstname. Luați în considerare că firstname nu este coloana de grupare.


-- Grupuri care conțin o persoană al cărei prenume are mai mult de 4 caractere: 5 rânduri rezultate
SELECT lastname
FROM   person
GROUP BY lastname
HAVING max(length(firstname)) > 4; -- max() returnează valoarea ONE (cea mai mare) pentru toate rândurile fiecărui grup 'lastname'

Rezultatul arată cele cinci familii Baker, de Winter, Goldstein, Rich și Stefanos (dar nu rândul(rândurile) cu firstname lung).

Vă rugăm să rețineți că acest rezultat este foarte diferit de interogarea similară pentru persoanele al căror prenume are mai mult de patru caractere:


-- Persoane al căror prenume are mai mult de patru caractere: șase rânduri rezultate!!
SELECT lastname, firstname
FROM   person
WHERE  length(firstname) > 4;
-- fără GROUP BY și fără HAVING. WHERE nu este un înlocuitor echivalent pentru HAVING!!

De unde vine rândul suplimentar? În familia de Winter, există două persoane cu un prenume mai lung de patru caractere: James și Victor. Pentru că în comanda fără GROUP BY selectăm pentru persoane și nu pentru familii, ambele rânduri sunt afișate individual.

Pe scurt, putem spune că clauza HAVING decide care grupuri fac parte din setul de rezultate și care nu.

(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)

Inteligența, de la originile naturale la frontierele artificiale - Inteligența Umană vs. Inteligența Artificială
Inteligența, de la originile naturale la frontierele artificiale – Inteligența Umană vs. Inteligența Artificială

Inteligența: redefinirea frontierelor. Explorarea Inteligenței Umane și Artificiale. Descoperă, învață și imaginează-ți viitorul.

Nu a fost votat Interval de prețuri: 23.78 lei până la 52.66 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Eseuri filosofice
Eseuri filosofice

Descoperă universul gândirii critice și al reflecției profunde!

Nu a fost votat 23.78 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Ghid marketing pe Internet
Ghid marketing pe Internet

Descoperă Secretele Marketingului Online cu o Carte Gratuită!

Nu a fost votat 0.00 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.


Descoperă mai multe la MultiMedia

Abonează-te ca să primești ultimele articole prin email.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *