Przykład HAVING w SQL
- Poprzednia strona sum() w SQL
- Następna strona 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
- Poprzednia strona sum() w SQL
- Następna strona Having w SQL