Riepilogo: in questo tutorial, imparerai come usare MySQL GROUP BY
per raggruppare le righe in sottogruppi in base ai valori di colonne o espressioni.
Introduzione a MySQL GROUP BY clause
La clausolaGROUP BY
raggruppa un insieme di righe in un insieme di righe di riepilogo per valori di colonne o espressioni. La clausolaGROUP BY
restituisce una riga per ogni gruppo. In altre parole, riduce il numero di righe nel set di risultati.,
Si utilizza spesso il GROUP BY
clausola con funzioni di aggregazione come SUM
AVG
MAX
MIN
e COUNT
. La funzione di aggregazione che appare nella clausola SELECT
fornisce informazioni su ciascun gruppo.
La clausola GROUP BY
è una clausola facoltativa dell’istruzione SELECT
., Di seguito viene illustrata la sintassi della clausolaGROUP BY
:
La clausolaGROUP BY
deve apparire dopo le clausoleFROM
eWHERE
. Seguendo le parole chiaveGROUP BY
è un elenco di colonne o espressioni separate da virgole che si desidera utilizzare come criteri per raggruppare le righe.,
MySQL evaluates the GROUP BY
clause after the FROM
, WHERE
and SELECT
clauses and before the HAVING
, ORDER BY
and LIMIT
clauses:
MySQL GROUP BY examples
Let’s take some example of using the GROUP BY
clause.,
A) GRUPPO MySQL semplice PER esempio
Diamo un’occhiata alla tabellaorders
nel database di esempio.,
si Supponga di voler gruppo di valori dell’ordine di stato in sottogruppi, si utilizza il tag GROUP BY
clausola con il status
colonna come la seguente query:
Code language: SQL (Structured Query Language) (sql)
Provare
Come si può vedere, GROUP BY
clausola restituisce uniche occorrenze di status
valori., Funziona come l’operatoreDISTINCT
come mostrato nella seguente query:
Code language: SQL (Structured Query Language) (sql)
Provalo
B) Utilizzando MySQL GROUP BY con funzioni aggregate
Le funzioni aggregate consentono di eseguire il calcolo di un insieme di righe e restituire un singolo valore. La clausolaGROUP BY
viene spesso utilizzata con una funzione aggregata per eseguire il calcolo e restituire un singolo valore per ciascun sottogruppo.,
Per esempio, se si desidera conoscere il numero di ordini in ogni stato, è possibile utilizzare il COUNT
funzione GROUP BY
clausola come segue:
Code language: SQL (Structured Query Language) (sql)
Provare
Consultare il seguente orders
e orderdetails
tabella.,
Per ottenere l’importo totale di tutti gli ordini per lo stato, unire il orders
tabella con i orderdetails
tabella e utilizzare il SUM
funzione per calcolare l’importo totale. Vedere la seguente query:
Code language: SQL (Structured Query Language) (sql)
Provalo
Allo stesso modo, la seguente query restituisce i numeri d’ordine e l’importo totale di ogni ordine.,
Code language: SQL (Structured Query Language) (sql)
Provalo
C) GRUPPO MySQL con expression example
In oltre alle colonne, è possibile raggruppare le righe per espressioni. La seguente query ottiene il totale delle vendite per ogni anno.
Provalo
In questo esempio, abbiamo usato la funzione YEAR
per estrarre i dati dell’anno dalla data dell’ordine ( orderDate
)., Abbiamo incluso solo gli ordini con shipped
stato nel totale delle vendite. Si noti che l’espressione che appare nella clausola SELECT
deve essere uguale a quella nella clausola GROUP BY
.
D) Utilizzo di MySQL GROUP BY con la clausola HAVING example
Per filtrare i gruppi restituiti dalla clausolaGROUP BY
, si utilizza una clausolaHAVING
. La seguente query utilizza la clausola HAVING
per selezionare le vendite totali degli anni successivi al 2003.,
Code language: SQL (Structured Query Language) (sql)
Provare
La clausola GROUP BY: MySQL vs standard SQL
SQL Standard non consente di utilizzare un alias nel GROUP BY
clausola, tuttavia, MySQL supporta questo.
Ad esempio, la query seguente estrae l’anno dalla data dell’ordine. Prima utilizzayear
come alias dell’espressioneYEAR(orderDate)
e quindi utilizza l’aliasyear
nella clausolaGROUP BY
., Questa query non è valida in SQL standard.
Provalo
MySQL permette anche di ordinare i gruppi in ordine crescente o decrescente, mentre lo standard SQL non lo fa. L’ordine predefinito è crescente., Per esempio, se si desidera di ottenere il numero di ordini da parte di stato e l’ordinamento dello stato in ordine decrescente, è possibile utilizzare il GROUP BY
clausola con DESC
come la seguente query:
Code language: SQL (Structured Query Language) (sql)
Provare
si Noti che abbiamo usato DESC
nel GROUP BY
clausola di ordinare l’ status
in ordine decrescente., Potremmo anche specificare esplicitamente ASC
nella clausola GROUP BY
per ordinare i gruppi in base allo stato in ordine crescente.
In questo tutorial, ti abbiamo mostrato come usare la clausola MySQL GROUP BY
per raggruppare le righe in sottogruppi in base ai valori di colonne o espressioni.
- Questo tutorial è stato utile?
- Sì