Ricerca…


Sintassi

  1. SELEZIONA espressione1, espressione2, ... espressione_n,
  2. aggregate_function (espressione)
  3. DA tabelle
  4. [WHERE condizioni]
  5. GROUP BY espressione1, espressione2, ... espressione_n;

Parametri

Parametro DETTAGLI
espressione1, espressione2, ... espressione_n Le espressioni che non sono incapsulate in una funzione di aggregazione e devono essere incluse nella clausola GROUP BY.
aggregate_function Una funzione come SUM, COUNT, MIN, MAX o AVG.
tavoli tavoli da cui desideri recuperare i record. Ci deve essere almeno una tabella elencata nella clausola FROM.
Dove condizioni Opzionale. Le condizioni che devono essere soddisfatte per i record da selezionare.

Osservazioni

La clausola GROUP BY di MySQL viene utilizzata in un'istruzione SELECT per raccogliere dati su più record e raggruppare i risultati di una o più colonne.

Il suo comportamento è governato in parte dal valore della variabile ONLY_FULL_GROUP_BY . Quando è abilitato, le istruzioni SELECT che raggruppano per qualsiasi colonna non presente nell'output restituiscono un errore. ( Questa è l'impostazione predefinita 5.7.5 .) Entrambe le impostazioni e non l'impostazione di questa variabile possono causare problemi agli utenti ingenui o agli utenti abituati ad altri DBMS.

GRUPPO UTILIZZANDO la funzione SOMMA

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

Raggruppa usando la funzione MIN

Assumere una tabella di dipendenti in cui ogni riga è un dipendente che ha un name , un department e uno salary .

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

Questo ti direbbe quale dipartimento contiene il dipendente con lo stipendio più basso e quale è lo stipendio. Trovare il name del dipendente con lo stipendio più basso in ogni dipartimento è un problema diverso, oltre lo scopo di questo esempio. Vedi "groupwise max".

GRUPPO UTILIZZANDO COUNT Funzione

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

GROUP BY utilizzando HAVING

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

L'utilizzo di GROUP BY ... HAVING per filtrare i record aggregati è analogo all'uso di SELECT ... WHERE per filtrare i singoli record.

Potresti anche dire HAVING Man_Power >= 10 dal momento che HAVING comprende "alias".

Gruppo utilizzando Group Concat

Group Concat viene utilizzato in MySQL per ottenere valori concatenati di espressioni con più di un risultato per colonna. Significato, ci sono molte righe da selezionare indietro per una colonna come Name(1):Score(*)

Nome Punto
Adamo A +
Adamo UN-
Adamo B
Adamo C +
Conto D-
John UN-
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM   Grade
GROUP BY Name

risultati:

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

GROUP BY con funzioni AGGREGATE

Tabella ORDINI

+---------+------------+----------+-------+--------+
| 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 |
+---------+------------+----------+-------+--------+
  • CONTARE

Restituisce il numero di righe che soddisfano un criterio specifico nella clausola WHERE .

Es .: numero di ordini per ogni cliente.

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

Risultato:

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

Restituisce la somma della colonna selezionata.

Es .: somma del totale e articoli per ciascun cliente.

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

Risultato:

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

Restituisce il valore medio di una colonna di valore numerico.

Ad esempio: valore medio dell'ordine per ciascun cliente.

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

Risultato:

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

Restituisce il valore più alto di una determinata colonna o espressione.

Es .: Totale ordine più alto per ogni cliente.

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

Risultato:

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

Restituisce il valore più basso di una determinata colonna o espressione.

Ad esempio: il totale dell'ordine più basso per ogni cliente.

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

Risultato:

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow