3.1 Istruzione GROUP BY
Il linguaggio SQL è molto potente. Oltre al semplice recupero dei dati, consente di raggruppare i dati al momento della query. Ad esempio, vogliamo sapere quanti tipi di prodotti di ciascun marchio abbiamo, come possiamo farlo?
C'è un operatore speciale per questo GROUP BY
, ecco come è scritto.
GROUP BY column
Scriviamo una query che chieda a SQL di visualizzare il numero di tipi di prodotto per ogni marca. Tale richiesta sarebbe simile a questa:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
Otterrai il seguente risultato della query:
marca | contare(*) |
---|---|
(NULLO) | 2 |
Bosch | 4 |
IKEA | 6 |
LG | 2 |
Fiore intelligente | 1 |
Analizziamo attentamente che tipo di richiesta abbiamo scritto e che tipo di risultato abbiamo ottenuto. Di conseguenza, vediamo due colonne. Il primo con un elenco di marchi, il che è logico. Volevamo ottenere qualcosa come un set di coppie "marca --> quantità" .
Si prega di notare che tra i nomi dei marchi c'è una parola NULL
. In effetti, abbiamo prodotti nel marchio in cui è scritto NULL
, e li vediamo qui. Un po' inaspettato, ma utile. Possiamo vedere quanti prodotti senza marchio ci sono.
Ora diamo un'occhiata più da vicino alla richiesta. Volevamo sapere il numero di prodotti di ogni marca, quindi abbiamo scritto GROUP BY brand
, e in SELECT
abbiamo scritto marca ed espressioneCOUNT(*)
COUNT(*)
è una cosiddetta funzione aggregata che viene eseguita su un gruppo di righe. Nel nostro caso, conta semplicemente il loro numero. Esistono molte di queste funzioni e le esamineremo un po 'più tardi.
3.2 Query complesse con GROUP BY
Ora scriviamo una query in cui scartiamo prima i prodotti il cui prezzo è inferiore a 10, quindi li raggruppiamo. Tale richiesta sarebbe simile a questa:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
Otterrai il seguente risultato della query:
marca | contare(*) |
---|---|
Bosch | 4 |
IKEA | 5 |
LG | 2 |
Fiore intelligente | 1 |
Tutti i prodotti NULL sono scomparsi dalla nostra tabella dei risultati, poiché erano molto economici, e il numero di prodotti IKEA è diminuito di 1. Da 6 a 5.
Ciò suggerisce di applicare prima WHERE
le righe desiderate al filtro e solo successivamente applicare il raggruppamento al risultato.
3.3 Nomi delle colonne del risultato
A proposito, puoi dare nomi alle colonne risultanti. Vedi come il server ha suggerito il nome count(*)
? Sostituiamolo con totale. Tale richiesta sarebbe simile a questa:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
Otterrai il seguente risultato della query:
marca | totale |
---|---|
Bosch | 4 |
IKEA | 5 |
LG | 2 |
Fiore intelligente | 1 |
Puoi anche rinominare le colonne esistenti. Prendiamo una delle query utilizzate in precedenza e aggiungiamo nuovi nomi alle colonne.
SELECT
id AS product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL
Otterrai il seguente risultato della query:
Codice prodotto | nome del prodotto | prezzo |
---|---|---|
2 | Sedia | 5.00 |
8 | Lampada | 15.00 |