Przykład HAVING w SQL

Funkcje agregujące (np. SUM) często wymagają dodania zdania GROUP BY.

Zdanie GROUP BY

Zdanie GROUP BY służy do łączenia funkcji agregujących, grupując wyniki na podstawie jednej lub kilku kolumn.

Gramatyka SQL GROUP BY

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

Przykład SQL GROUP BY

Mamy poniższą tabelę "Orders":

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

Teraz chcemy znaleźć sumę kwot dla każdego klienta (łączne zamówienia).

Chcemy użyć instrukcji GROUP BY, aby zgrupować klientów.

Używamy następującego polecenia SQL:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

Zbiór wyników wygląda tak:

Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

Świetnie, prawda?

Zobaczmy, co się stanie, jeśli pominie się GROUP BY:

SELECT Customer,SUM(OrderPrice) FROM Orders

Zbiór wyników wygląda tak:

Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

Zbiór wyników nie jest tym, czego potrzebujemy.

Dlaczego nie można użyć tego polecenia SELECT? Wyjaśnienie poniżej: Polecenie SELECT指定了两列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" zwraca pojedynczą wartość("OrderPrice" kolumny sumarycznej),a "Customer" zwraca 6 wartości(każda wartość odpowiada wierszowi w tabeli "Orders")。Dlatego nie uzyskujemy poprawnych wyników. Jednak, jak już zobaczyłeś, instrukcja GROUP BY rozwiązuje ten problem.

GROUP BY jednej lub więcej kolumn

Możemy również zastosować instrukcję GROUP BY do jednej lub więcej kolumn, na przykład:

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate