banner
vote

Klauzula GROUP BY

Kluzula GROUP BY umożliwia wykonywanie funkcji grupujących na grupie wartości wyodrębnionych na podstawie wartości innej kolumny.

Aby użyć kolumny do grupowania, musimy pamiętać, aby umieścić ją w liście kolumn, zaraz po słowie SELECT. W przeciwnym razie nie będzie ona dostępna dla klauzuli grupującej GROUP BY.
SELECT SUM(kolumna),inna kolumna FROM tabela GROUP BY inna kolumna
PRZYKŁAD
Liczymy średnią wartość zamówienia każdego klienta
Tabela Orders :
id
customer_id
value
date

Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
zapytanie : SELECT customer_id,AVG(value) FROM orders GROUP BY customer_id
Wynik zapytania :
customer_id
value
1
119.25
2
60
3
174
4
104.25
ĆWICZENIE
Podaj id klientów wraz z sumaryczną wartością ich zamówień
Tabela Orders :
id
customer_id
value
date

Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
Wpisz zapytanie do bazy :
Zobacz jak powinno wyglądać zapytanie
SELECT customer_id,SUM(value) FROM orders GROUP BY customer_id

Klauzula HAVING, znajdująca się zaraz po ORDER BY, służy do określania dodatkowych kryteriów przy grupowaniu (jest to odpowiednik warunku WHERE w zapytaniach bez funkcji grupujących).
SELECT SUM(kolumna) FROM tabela GROUP BY inna kolumna
HAVING SUM(kolumna) > wartość
PRZYKŁAD
Znajdujemy największą wartość zamówienia klienta i pokazujemy te które są większe od 100
Tabela Orders :
id
customer_id
value
date

Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
zapytanie : SELECT customer_id,MAX(value) FROM orders GROUP BY customer_id HAVING MAX(value)>100
Wynik zapytania :
customer_id
value
1
198
3
174
4
188
ĆWICZENIE
Podaj id produktów z tabeli Order_product wraz z liczbą wszystkich zamówionych sztuk, jeśli liczba ta należy do zbioru {2,4}
Tabela Order_product :
order_id
product_id
amount
1
2
2
1
4
1
2
6
1
2
8
1
2
5
2
3
5
1
3
7
2
4
5
1
4
2
1
4
7
2
5
4
1
6
6
1
Wpisz zapytanie do bazy :
Zobacz jak powinno wyglądać zapytanie
SELECT product_id,SUM(amount) FROM order_product GROUP BY product_id HAVING SUM(amount) IN (2,4)