Problém:
Chcete najít skupiny řádků s určitým počtem položek ve skupině.
Příklad:
Naše databáze obsahuje tabulku s názvem product
s údaji v následujících sloupcích:id
, name
a category
.
id | jméno | kategorie |
---|---|---|
1 | pohovka | nábytek |
2 | rukavice | oblečení |
3 | Tričko | oblečení |
4 | židle | nábytek |
5 | stůl | nábytek |
6 | sledovat | elektronika |
7 | křeslo | nábytek |
8 | sukně | oblečení |
9 | rádiový přijímač | elektronika |
Pojďme najít kategorii produktů s více než dvěma položkami.
Řešení:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
Zde jsou výsledky:
kategorie | počet |
---|---|
nábytek | 4 |
oblečení | 3 |
Diskuse:
Pro filtrování záznamů podle daného počtu řádků ve skupině použijte klauzuli HAVING. Filtruje řádky pomocí funkce agregace podmínek, jako je COUNT. Nejprve v SELECT použijte název sloupce nebo sloupců k seskupení řádků (toto je kategorie v našem příkladu), poté umístěte agregační funkci COUNT, která sečte počet záznamů v každé skupině. Chcete-li spočítat počet řádků, použijte sloupec id, který ukládá jedinečné hodnoty (v našem příkladu používáme COUNT(id)
). Dále použijte klauzuli GROUP BY k seskupení záznamů podle sloupců (GROUP BY
kategorie výše). Po použití GROUP BY k filtrování záznamů pomocí agregačních funkcí, jako je COUNT, použijte klauzuli HAVING. Vždy se používá po klauzuli GROUP BY. V HAVING používáme podmínku k porovnání hodnoty s hodnotou vrácenou agregační funkcí. V příkladu porovnáme, zda COUNT(id) vrátí hodnotu vyšší než dvě. Pokud je true, vrátí se kategorie s počtem produktů.