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

Sådan filtreres poster med aggregatfunktion AVG

Problem:

Du vil finde grupper af rækker, hvor gennemsnittet af værdier i en kolonne er højere eller lavere end en given værdi.

Eksempel:

Vores database har en tabel med navnet product med data i følgende kolonner:id , name , grocery og price .

id navn købmand pris
1 mælk Grøn butik 2.34
2 brød Clarks købmand 3,56
3 brød Supermarked 4.15
4 mælk Supermarked 1,80
5 brød Købmand Amanda 2.26
6 mælk Violet købmand 3,45
7 mælk Clarks købmand 2.10
8 brød Violet købmand 2,55
9 mælk Købmand Amanda 1,95

Lad os finde navnene på produkter, hvor gennemsnitsprisen for hvert produkt blandt dagligvarer er højere end 3,00.

Løsning:

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

Her er resultatet:

navn gennemsnit
brød 3.13

Diskussion:

For at filtrere poster ved hjælp af aggregeringsfunktionen skal du bruge HAVING-udtrykket.

Her beregner vi den samlede værdi:gennemsnitsprisen for hvert produkt. Den ene sælges af mere end én købmand; derfor beregnes gennemsnitsprisen for hver (i vores eksempel SELECT name, AVG(price) ). Udover aggregatfunktionen bruger vi også kolonnenavnet i SELECT, så vi bør bruge GROUP BY med dette kolonnenavn (GROUP BY name ).

Det sidste trin er at bruge aggregatfunktionen i HAVING-sætningen. Husk at HAVING skal stå efter GROUP BY-sætningen. Den indeholder betingelsen, som sammenligner den værdi, der returneres af den aggregerede funktion, med en given værdi. Ovenfor er det gennemsnitsprisen på produktet med en værdi på 3,00 (HAVING AVG(price)>3.00 ). I denne forespørgsel tjekker vi, om den gennemsnitlige pris for hvert produkt i alle dagligvarer er højere end tre. Forespørgslen viste kun ét produkt, brød, med en gennemsnitspris højere end tre.


  1. NCHR() Funktion i Oracle

  2. Problemer under import af en txt-fil til postgres ved hjælp af php

  3. Håndtering af samtidige opdateringer i dvale

  4. Oracle VÆLG TOP 10 poster