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.