sql >> Databasteknik >  >> RDS >> Database

Hur man filtrerar poster med aggregatfunktion AVG

Problem:

Du vill hitta grupper av rader där medelvärdet av värden i en kolumn är högre eller lägre än ett givet värde.

Exempel:

Vår databas har en tabell som heter product med data i följande kolumner:id , name , grocery och price .

id namn livsmedel pris
1 mjölk Grön butik 2.34
2 bröd Clark's Grocery 3.56
3 bröd Supermarknad 4.15
4 mjölk Supermarknad 1,80
5 bröd Mat Amanda 2.26
6 mjölk Violett livsmedelsbutik 3.45
7 mjölk Clark's Grocery 2.10
8 bröd Violett livsmedelsbutik 2,55
9 mjölk Mat Amanda 1,95

Låt oss hitta namnen på produkter där det genomsnittliga priset för varje produkt bland dagligvaror är högre än 3,00.

Lösning:

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

Här är resultatet:

namn genomsnitt
bröd 3.13

Diskussion:

Om du vill filtrera poster med aggregatfunktionen använder du HAVING-satsen.

Här beräknar vi det sammanlagda värdet:det genomsnittliga priset för varje produkt. En säljs av mer än en livsmedelsbutik; därför beräknas det genomsnittliga priset för varje (i vårt exempel, SELECT name, AVG(price) ). Förutom aggregatfunktionen använder vi även kolumnnamnet i SELECT, så vi bör använda GROUP BY med detta kolumnnamn (GROUP BY name ).

Det sista steget är att använda aggregatfunktionen i HAVING-satsen. Kom ihåg att HAVING ska sättas efter GROUP BY-satsen. Den innehåller villkoret som jämför värdet som returneras av aggregatfunktionen med ett givet värde. Ovan är det genomsnittspriset för produkten med ett värde 3,00 (HAVING AVG(price)>3.00 ). I den här frågan kontrollerar vi om det genomsnittliga priset för varje produkt i alla dagligvaror är högre än tre. Frågan visade bara en produkt, bröd, med ett genomsnittspris högre än tre.


  1. Generering av sekvenser i ordning

  2. Lägg till en främmande nyckel till en befintlig tabell i SQLite

  3. Filtrera data med JDBC RowSet

  4. Android:Hur importerar jag kontakt från telefonen?