Skip to content

Agregační funkce SQL vysvětleny

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
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
Sbírá ne-NULLové vstupní hodnoty do pole.SELECT ARRAY_AGG(total) FROM orders
Sbírá vstupní řádky do JSON pole; varianta JSONB ukládá parsované binárně.SELECT JSONB_AGG(user_id) FROM orders
TRUE, když každá / libovolná ne-NULLová vstupní hodnota je pravdivá.SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Standardní alias pro BOOL_AND.SELECT EVERY(total > 0) FROM orders
Interpolovaný / percentil nejbližší hodnosti nad seřazeným vstupem; vyžaduje WITHIN GROUP.SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Nejčastější vstupní hodnota; agregace uspořádané množiny v Postgresu.SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Předává pořadí řazení agregacím uspořádaných a hypotetických množin.SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Omezí agregaci na řádky, které splní podmínku.SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Seřadí hodnoty předtím, než je agregace spojí nebo sesbírá.SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) a COUNT(1) počítají každý řádek; COUNT(col) přeskakuje NULLové vstupy.SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Výběrová směrodatná odchylka ne-NULLových číselných hodnot. STDDEV_POP dává populační variantu; výchozí podoba holého názvu se liší podle enginu.SELECT STDDEV(total) FROM orders
Výběrový rozptyl ne-NULLových číselných hodnot (druhá mocnina STDDEV). VAR_SAMP a VAR_POP pojmenovávají každou variantu.SELECT VARIANCE(total) FROM orders