MySQL
Raggruppa per
Ricerca…
Sintassi
- SELEZIONA espressione1, espressione2, ... espressione_n,
- aggregate_function (espressione)
- DA tabelle
- [WHERE condizioni]
- 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 |
+----------+-----------+