Szukaj…


Składnia

  1. WYBIERZ wyrażenie1, wyrażenie2, ... wyrażenie_n,
  2. aggregate_function (wyrażenie)
  3. Z tabel
  4. [GDZIE warunki]
  5. GROUP BY wyrażenie1, wyrażenie2, ... wyrażenie_n;

Parametry

Parametr DETALE
wyrażenie1, wyrażenie2, ... wyrażenie_n Wyrażenia, które nie są zawarte w funkcji agregującej i muszą zostać uwzględnione w klauzuli GROUP BY.
funkcja_agregacji Funkcja taka jak SUMA, LICZNIK, MIN, MAKS lub AVG.
stoły Tabele, z których chcesz pobrać rekordy. W klauzuli FROM musi znajdować się co najmniej jedna tabela.
GDZIE warunki Opcjonalny. Warunki, które muszą zostać spełnione, aby rekordy mogły zostać wybrane.

Uwagi

Klauzula MySQL GROUP BY jest używana w instrukcji SELECT do gromadzenia danych w wielu rekordach i grupowania wyników według jednej lub więcej kolumn.

Jego zachowanie jest częściowo regulowane przez wartość zmiennej ONLY_FULL_GROUP_BY . Gdy ta opcja jest włączona, instrukcje SELECT grupujące według dowolnej kolumny, która nie znajduje się w danych wyjściowych, zwracają błąd. ( Jest to ustawienie domyślne od 5.7.5 .) Zarówno ustawienie, jak i brak ustawienia tej zmiennej może powodować problemy dla naiwnych użytkowników lub użytkowników przyzwyczajonych do innych DBMS.

GRUPUJ ZA POMOCĄ funkcji SUM

SELECT product, SUM(quantity) AS "Total quantity"
FROM order_details
GROUP BY product;

Grupuj za pomocą funkcji MIN

Załóżmy tabelę pracowników, w której każdy wiersz to pracownik o name , department i salary .

SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;

Dzięki temu dowiesz się, który dział zawiera pracownika o najniższym wynagrodzeniu i jaka jest to pensja. Znalezienie name pracownika o najniższej pensji w każdym dziale to inny problem, wykraczający poza zakres tego przykładu. Zobacz „max grupowo”.

GRUPUJ WEDŁUG LICZBY Funkcja

SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department;

GRUPUJ ZA POMOCĄ HAVING

SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;

Użycie GROUP BY ... HAVING do filtrowania zagregowanych rekordów jest analogiczne do użycia SELECT ... WHERE do filtrowania pojedynczych rekordów.

Można również powiedzieć HAVING Man_Power >= 10 ponieważ HAVING rozumie „aliasy”.

Grupuj za pomocą Group Concat

Group Concat jest używany w MySQL, aby uzyskać połączone wartości wyrażeń z więcej niż jednym wynikiem na kolumnę. Oznacza to, że istnieje wiele wierszy do wyboru z powrotem dla jednej kolumny, takich jak Name(1):Score(*)

Nazwa Wynik
Adam A +
Adam ZA-
Adam b
Adam C +
Rachunek RE-
Jan ZA-
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM   Grade
GROUP BY Name

Wyniki:

+------+------------+ 
| Name | Grades     | 
+------+------------+ 
| Adam | C+ B A- A+ | 
| Bill | D-         | 
| John | A-         | 
+------+------------+ 

GROUP BY z funkcjami AGREGACJI

Tabela ZAMÓWIENIA

+---------+------------+----------+-------+--------+
| orderid | customerid | customer | total | items  |
+---------+------------+----------+-------+--------+
|       1 |          1 | Bob      |  1300 |     10 |
|       2 |          3 | Fred     |   500 |      2 |
|       3 |          5 | Tess     |  2500 |      8 |
|       4 |          1 | Bob      |   300 |      6 |
|       5 |          2 | Carly    |   800 |      3 |
|       6 |          2 | Carly    |  1000 |     12 |
|       7 |          3 | Fred     |   100 |      1 |
|       8 |          5 | Tess     | 11500 |     50 |
|       9 |          4 | Jenny    |   200 |      2 |
|      10 |          1 | Bob      |   500 |     15 |
+---------+------------+----------+-------+--------+
  • LICZYĆ

Zwraca liczbę wierszy spełniających określone kryteria w klauzuli WHERE .

Np .: liczba zamówień dla każdego klienta.

SELECT customer, COUNT(*) as orders
FROM orders
GROUP BY customer
ORDER BY customer

Wynik:

+----------+--------+
| customer | orders |
+----------+--------+
| Bob      |      3 |
| Carly    |      2 |
| Fred     |      2 |
| Jenny    |      1 |
| Tess     |      2 |
+----------+--------+
  • SUMA

Zwraca sumę wybranej kolumny.

Np .: Suma sumy i pozycji dla każdego klienta.

SELECT customer, SUM(total) as sum_total, SUM(items) as sum_items
FROM orders
GROUP BY customer
ORDER BY customer

Wynik:

+----------+-----------+-----------+
| customer | sum_total | sum_items |
+----------+-----------+-----------+
| Bob      |      2100 |        31 |
| Carly    |      1800 |        15 |
| Fred     |       600 |         3 |
| Jenny    |       200 |         2 |
| Tess     |     14000 |        58 |
+----------+-----------+-----------+
  • AVG

Zwraca średnią wartość kolumny wartości liczbowej.

Np .: Średnia wartość zamówienia dla każdego klienta.

SELECT customer, AVG(total) as avg_total
FROM orders
GROUP BY customer
ORDER BY customer

Wynik:

+----------+-----------+
| customer | avg_total |
+----------+-----------+
| Bob      |       700 |
| Carly    |       900 |
| Fred     |       300 |
| Jenny    |       200 |
| Tess     |      7000 |
+----------+-----------+
  • MAX

Zwraca najwyższą wartość określonej kolumny lub wyrażenia.

Np .: najwyższa suma zamówienia dla każdego klienta.

SELECT customer, MAX(total) as max_total
FROM orders
GROUP BY customer
ORDER BY customer

Wynik:

+----------+-----------+
| customer | max_total |
+----------+-----------+
| Bob      |      1300 |
| Carly    |      1000 |
| Fred     |       500 |
| Jenny    |       200 |
| Tess     |     11500 |
+----------+-----------+
  • MIN

Zwraca najniższą wartość określonej kolumny lub wyrażenia.

Np .: Najniższa suma zamówienia dla każdego klienta.

SELECT customer, MIN(total) as min_total
FROM orders
GROUP BY customer
ORDER BY customer

Wynik:

+----------+-----------+
| customer | min_total |
+----------+-----------+
| Bob      |       300 |
| Carly    |       800 |
| Fred     |       100 |
| Jenny    |       200 |
| Tess     |      2500 |
+----------+-----------+


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow