sql >> Databáze >  >> RDS >> Database

Jak filtrovat záznamy pomocí agregační funkce AVG

Problém:

Chcete najít skupiny řádků, ve kterých je průměr hodnot ve sloupci vyšší nebo nižší než daná hodnota.

Příklad:

Naše databáze obsahuje tabulku s názvem product s údaji v následujících sloupcích:id , name , grocery a price .

id jméno potraviny cena
1 mléko Zelený obchod 2,34
2 chléb Clark’s Grocery 3,56
3 chléb Super trh 4.15
4 mléko Super trh 1,80
5 chléb Potraviny Amanda 2.26
6 mléko Violet Grocery 3,45
7 mléko Clark’s Grocery 2.10
8 chléb Violet Grocery 2,55
9 mléko Potraviny Amanda 1,95

Pojďme najít názvy produktů, ve kterých je průměrná cena každého produktu mezi potravinami vyšší než 3,00.

Řešení:

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

Zde je výsledek:

name průměr
chléb 3.13

Diskuse:

Chcete-li filtrovat záznamy pomocí agregační funkce, použijte klauzuli HAVING.

Zde vypočítáme agregovanou hodnotu:průměrnou cenu každého produktu. Jeden prodává více než jeden obchodník s potravinami; proto se průměrná cena vypočítá pro každou (v našem příkladu SELECT name, AVG(price) ). Kromě agregační funkce používáme v SELECT také název sloupce, takže bychom s tímto názvem sloupce měli použít GROUP BY (GROUP BY name ).

Posledním krokem je použití agregační funkce v klauzuli HAVING. Pamatujte, že HAVING by mělo být uvedeno za klauzuli GROUP BY. Obsahuje podmínku, která porovnává hodnotu vrácenou agregační funkcí s danou hodnotou. Výše je průměrná cena produktu s hodnotou 3,00 (HAVING AVG(price)>3.00 ). V tomto dotazu zkontrolujeme, zda je průměrná cena každého produktu ve všech potravinách vyšší než tři. Dotaz zobrazil pouze jeden produkt, chléb, s průměrnou cenou vyšší než tři.


  1. Pochopení funkce PIVOT v T-SQL

  2. Funkce MAX() v MariaDB

  3. Jak vytvořit jeden koncový bod pro nastavení replikace PostgreSQL pomocí HAProxy

  4. Nasazení LocalDB na klientském PC