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 SELECTabbiamo 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 WHEREle 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