Grupisanje podatka –  GROUP BY i HAVING klauzule

GROUP BY i HAVING klauzule
SQL uputstva

Kada radimo sa velikim količinama podataka, često je potrebno grupisati podatke na osnovu određene kolone kako bismo dobili zbirne informacije kao što su suma, prosek, broj redova, itd. U SQL-u, za ovu svrhu koristimo GROUP BY klauzulu. 

GROUP BY se koristi u kombinaciji sa agregatnim funkcijama kao što su COUNT, SUM, AVG, MAX, i MIN da bi se podaci grupisali prema vrednostima u jednoj ili više kolona.

Osnovna sintaksa za korišćenje GROUP BY klauzule:

SELECT kolona1, agregatna_funkcija (kolona2)
FROM tabela
GROUP BY kolona1;

  • kolona1: Kolona prema kojoj grupišemo podatke.
  • agregatna_funkcija (kolona2): Agregatna funkcija koja se primenjuje na kolonu koju želimo da sumiramo, brojimo, ili izračunamo prosek.

Osnovne agregatne funkcije:

GROUP BY i HAVING klauzule
SQL uputstva
Agregatne funkcije

Primeri upotrebe GROUP BY klauzule:

  1. Prikazati ukupan broj porudžbina.

Upit ispod broji sve porudžbine koristeći agregatnu funkciju COUNT. GROUP BY nije potreban, pošto ne grupišemo podatke po određenom kriterijumu.

SELECT COUNT(Order_ID) FROM Orders

GROUP BY i HAVING klauzule
SQL uputstva
  1. Prikazati broj porudžbina po kupcu.

U ovom primeru, brojimo koliko porudžbina ima svaki kupac. GROUP BY grupiše sve porudžbine prema kupcu, a zatim COUNT funkcija izračunava broj porudžbina za svakog kupca.

SELECT Customer_ID, COUNT(Order_ID) AS Broj_Porudzbina
FROM Orders
GROUP BY Customer_ID

GROUP BY i HAVING klauzule
SQL uputstva

3. Prikazati ukupnu vrednost porudžbina po kupcu.

Ovaj upit računa ukupnu vrednost svih porudžbina za svakog kupca. SUM funkcija se koristi da sabere vrednosti porudžbina unutar svake grupe definisane pomoću GROUP BY klauzule. U okviru SUM funkcije možemo koristiti i matematičke operacije.

SELECT o.Customer_ID, SUM(od.Quantity*p.Price) AS Ukupna_Vrednost
FROM Orders o
LEFT JOIN Order_Details od on o.Order_ID=od.Order_ID
LEFT JOIN Products p on od.Product_ID=p.Product_ID
GROUP BY o.Customer_ID

Filtriranje grupisanih podataka – HAVING klauzula

Dok se WHERE klauzula koristi za filtriranje redova pre nego što se primeni GROUP BY, HAVING klauzula služi za filtriranje grupisanih podataka nakon što je grupisanje izvršeno.

Osnovna sintaksa za korišćenje HAVING klauzule:

SELECT kolona1, agregatna_funkcija (kolona2)
FROM tabela
GROUP BY kolona1
HAVING uslov;

  • uslov: Usmerava se na grupisane podatke i definiše koje grupe će biti uključene u rezultat.

Primeri upotrebe HAVING klauzule:

  1. Prikazati samo one kupce koji imaju više od 2 porudžbine.

U ovom primeru, prvo grupišemo porudžbine po kupcu, a zatim pomoću HAVING klauzule filtriramo grupe da prikažemo samo one kupce koji imaju više od 2 porudžbine.

SELECT Customer_ID, COUNT(Order_ID) AS Broj_Porudzbina
FROM Orders
GROUP BY Customer_ID
HAVING COUNT(Order_ID) > 2

GROUP BY i HAVING klauzule
SQL uputstva
  1. Prikazati ukupnu vrednost porudžbina po kupcu, ali samo za one kupce čije porudžbine premašuju vrednost od 40000.

Ovaj upit prikazuje samo one kupce čija ukupna vrednost porudžbina prelazi 40000.

SELECT o.Customer_ID, SUM(od.Quantity*p.Price) AS Ukupna_Vrednost
FROM Orders o
LEFT JOIN Order_Details od on o.Order_ID=od.Order_ID
LEFT JOIN Products p on od.Product_ID=p.Product_ID
GROUP BY o.Customer_ID
HAVING SUM(od.Quantity*p.Price) > 40000

Za upotrebu JOIN operatora možete pogledati i članak ispod.

Leave a comment

Your email address will not be published. Required fields are marked *