Database
 sql >> Database >  >> RDS >> Database

Come filtrare i record con la funzione di aggregazione AVG

Problema:

Vuoi trovare gruppi di righe in cui la media dei valori in una colonna è maggiore o minore di un determinato valore.

Esempio:

Il nostro database ha una tabella denominata product con i dati nelle seguenti colonne:id , name , grocery e price .

id alimentari prezzo
1 latte Negozio Verde 2.34
2 pane La drogheria di Clark 3.56
3 pane Supermercato 4.15
4 latte Supermercato 1.80
5 pane Drogheria Amanda 2.26
6 latte Drogheria Viola 3.45
7 latte La drogheria di Clark 2.10
8 pane Drogheria Viola 2,55
9 latte Drogheria Amanda 1,95

Troviamo i nomi dei prodotti in cui il prezzo medio di ogni prodotto tra i generi alimentari è superiore a 3,00.

Soluzione:

SELECT name, AVG(price)
FROM product
GROUP BY name
HAVING AVG(price)>3.00;

Ecco il risultato:

nome media
pane 3.13

Discussione:

Per filtrare i record utilizzando la funzione di aggregazione, utilizzare la clausola HAVING.

Qui calcoliamo il valore aggregato:il prezzo medio di ogni prodotto. Uno è venduto da più di un droghiere; pertanto il prezzo medio viene calcolato per ciascuno (nel nostro esempio, SELECT name, AVG(price) ). Oltre alla funzione di aggregazione, utilizziamo anche il nome della colonna in SELECT, quindi dovremmo usare GROUP BY con questo nome di colonna (GROUP BY name ).

L'ultimo passaggio consiste nell'usare la funzione di aggregazione nella clausola HAVING. Ricorda che HAVING dovrebbe essere inserito dopo la clausola GROUP BY. Contiene la condizione che confronta il valore restituito dalla funzione di aggregazione con un dato valore. Sopra, è il prezzo medio del prodotto con un valore 3.00 (HAVING AVG(price)>3.00 ). In questa query, controlliamo se il prezzo medio di ogni prodotto in tutti i generi alimentari è superiore a tre. La query mostrava un solo prodotto, il pane, con un prezzo medio superiore a tre.