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

So filtern Sie Datensätze mit der Aggregatfunktion AVG

Problem:

Sie möchten Gruppen von Zeilen finden, in denen der Durchschnitt der Werte in einer Spalte höher oder niedriger als ein bestimmter Wert ist.

Beispiel:

Unsere Datenbank hat eine Tabelle namens product mit Daten in den folgenden Spalten:id , name , grocery und price .

id Name Lebensmittelgeschäft Preis
1 Milch Grüner Laden 2.34
2 Brot Clark's Grocery 3.56
3 Brot Supermarkt 4.15
4 Milch Supermarkt 1,80
5 Brot Lebensmittelgeschäft Amanda 2.26
6 Milch Violett Lebensmittelgeschäft 3,45
7 Milch Clark's Grocery 2.10
8 Brot Violett Lebensmittelgeschäft 2,55
9 Milch Lebensmittelgeschäft Amanda 1,95

Lassen Sie uns die Namen von Produkten finden, bei denen der Durchschnittspreis jedes Produkts bei Lebensmitteln höher als 3,00 ist.

Lösung:

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

Hier ist das Ergebnis:

name Durchschnitt
Brot 3.13

Diskussion:

Um Datensätze mit der Aggregatfunktion zu filtern, verwenden Sie die HAVING-Klausel.

Hier berechnen wir den Gesamtwert:den Durchschnittspreis jedes Produkts. Einer wird von mehr als einem Lebensmittelhändler verkauft; daher wird jeweils der Durchschnittspreis berechnet (in unserem Beispiel SELECT name, AVG(price)). ). Neben der Aggregatfunktion verwenden wir auch den Spaltennamen in SELECT, also sollten wir GROUP BY mit diesem Spaltennamen verwenden (GROUP BY name ).

Der letzte Schritt ist die Verwendung der Aggregatfunktion in der HAVING-Klausel. Denken Sie daran, dass HAVING nach der GROUP BY-Klausel stehen sollte. Sie enthält die Bedingung, die den von der Aggregatfunktion zurückgegebenen Wert mit einem gegebenen Wert vergleicht. Oben ist es der Durchschnittspreis des Produkts mit einem Wert von 3,00 (HAVING AVG(price)>3.00). ). In dieser Abfrage prüfen wir, ob der Durchschnittspreis jedes Produkts in allen Lebensmitteln höher als drei ist. Die Abfrage zeigte nur ein Produkt, Brot, mit einem Durchschnittspreis von mehr als drei.