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 :
Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
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 :
ĆWICZENIE
Podaj id klientów wraz z sumaryczną wartością ich zamówień
Tabela Orders :
Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
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ść
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 :
Warning: Invalid argument supplied for foreach() in /home/11smdrobniak/class.content/class.Excercise.php on line 260
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 :
Ć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 :
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)