Agregační funkce SQL, GROUP BY, HAVING a distinct/pokročilé agregace s návratovými hodnotami a jednořádkovými příklady nad tabulkou objednávek.
Agregační funkce sloučí mnoho řádků do jediného skalárního výsledku. GROUP BY rozdělí řádky podle klíče před agregací. HAVING filtruje skupiny po agregaci. NULLové vstupy každá agregace kromě COUNT(*) přeskakuje.
Referenční tabulka · 29 položek
Agregační funkce SQLExplained
29 of 29 rows
Skalární
Počet ne-NULLových vstupních hodnot; COUNT(*) počítá všechny řádky.
SELECT COUNT(*) FROM orders
Součet ne-NULLových číselných hodnot. Při prázdné sadě vrací NULL.
SELECT SUM(total) FROM orders
Aritmetický průměr ne-NULLových číselných hodnot. NULLové vstupy ignoruje.
SELECT AVG(total) FROM orders
Nejmenší ne-NULLová hodnota mezi libovolnými srovnatelnými typy.
SELECT MIN(total) FROM orders
Největší ne-NULLová hodnota mezi libovolnými srovnatelnými typy.
SELECT MAX(total) FROM orders
Seskupené
Rozdělí vstupní řádky podle klíče; agregace běží po oddílech.
SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Predikát vyhodnocený po agregaci pro každou skupinu. Nahrazuje WHERE u agregací.
SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Několik agregací spočtených pro každou skupinu v jednom průchodu.
SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Spočte několik seskupení v jednom příkazu; klíče mimo aktuální sadu vrací NULL.
SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Zkratka pro seskupovací sady podle hierarchie; přidává mezisoučty a celkový součet.
SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Zkratka pro každou kombinaci uvedených klíčů jako seskupovací sady.
SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Míchá obyčejné seskupovací klíče se seskupovacími sadami v jedné klauzuli.
SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Ponechá první řádek pro každý klíč v daném řazení. Rozšíření Postgresu.
SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct a pokročilé
Počet jedinečných ne-NULLových hodnot. Nejprve odstraní duplicity.
SELECT COUNT(DISTINCT user_id) FROM orders
Odhadne počet jedinečných hodnot s omezenou chybou; určeno pro velké vstupy.
SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Zřetězí ne-NULLové řetězce oddělovačem.
SELECT STRING_AGG(user_id::text, ',') FROM orders
Zřetězí ne-NULLové řetězce; název STRING_AGG v MySQL.
SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders