Gruparea datelor vă permite să împărțiți toate datele în seturi logice, ceea ce face posibilă efectuarea de calcule statistice separat în fiecare grup.
Grupurile sunt create folosind instrucțiunea GROUP BY a operatorului SELECT. Să luăm în considerare un exemplu.
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
Cu această solicitare, am extras informații despre numărul de produse vândute în fiecare lună. Operatorul SELECT ordonă să iasă două coloane Product - numele produsului și Product_num - câmpul calculat pe care l-am creat pentru a afișa cantitatea de produse vândute (formula câmp SUM(Quantity)). Clauza GROUP BY spune DBMS să grupeze datele după coloana Produs.
Așa cum am filtrat rândurile dintr-un tabel, putem filtra datele grupate. Pentru aceasta, există operatorul HAVING în SQL. Să luăm exemplul anterior și să adăugăm filtrarea de grup.
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
HAVING SUM(Quantity) > 4000
Putem observa că după ce s-a calculat numărul de bunuri vândute pentru fiecare produs, SGBD-ul „taie” acele produse care au fost vândute mai puțin de 4.000 de unități.
După cum puteți vedea, operatorul HAVING este foarte asemănător cu operatorul WHERE, dar există o diferență semnificativă între ele: WHERE filtrează datele înainte de a fi grupate, iar HAVING filtrează după grupare. Astfel, rândurile care au fost eliminate de clauza WHERE nu vor fi incluse în grup. Deci, operatorii WHERE și HAVING pot fi folosiți în aceeași propoziție. Luați în considerare un exemplu:
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
WHERE Product <> 'Skis Long'
GROUP BY Product
HAVING SUM(Quantity) > 4000
Am adăugat operatorul WHERE la exemplul anterior, unde am specificat produsul „Skis Long”, care la rândul său a afectat gruparea după operatorul HAVING. Ca urmare, putem observa că produsul „Skis Long” nu a intrat în lista grupurilor cu peste 4.000 de produse vândute.
Ca și în cazul eșantionării normale a datelor, putem sorta grupurile după gruparea cu operatorul HAVING. Pentru aceasta, putem folosi operatorul deja familiar ORDER BY. În această situație, aplicarea sa este similară cu exemplele anterioare. Exemplu:
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
HAVING SUM(Quantity) > 3000
ORDER BY SUM(Quantity)
sau pur și simplu specificați numărul câmpului în ordinea în care dorim să sortăm:
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
HAVING SUM(Quantity) > 3000
ORDER BY 2
Vedem că pentru a sorta rezultatele rezumate, trebuie doar să scriem clauza cu ORDER BY după operatorul HAVING.