Skip to content

Aggregatiefuncties in SQL uitgelegd

SQL-aggregatiefuncties, GROUP BY, HAVING en distinct/geavanceerde aggregaten, gekoppeld aan retourwaarden en éénregelige voorbeelden op een orders-tabel.

Aggregatiefuncties vouwen veel rijen samen tot één scalair resultaat. GROUP BY partitioneert rijen op sleutel vóór de aggregatie. HAVING filtert groepen ná de aggregatie. NULL-input wordt overgeslagen door elke aggregaatfunctie behalve COUNT(*).

Referentietabel · 29 items
29 of 29 rows
Scalaire
Aantal inputwaarden die niet NULL zijn; COUNT(*) telt alle rijen.SELECT COUNT(*) FROM orders
Som van numerieke waarden die niet NULL zijn. Retourneert NULL op een lege verzameling.SELECT SUM(total) FROM orders
Rekenkundig gemiddelde van numerieke waarden die niet NULL zijn. NULL-input wordt genegeerd.SELECT AVG(total) FROM orders
Kleinste waarde die niet NULL is, voor elk vergelijkbaar type.SELECT MIN(total) FROM orders
Grootste waarde die niet NULL is, voor elk vergelijkbaar type.SELECT MAX(total) FROM orders
Gegroepeerd
Partitioneert inputrijen op sleutel; aggregaten draaien per partitie.SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Predicaat dat per groep wordt geëvalueerd na aggregatie. Vervangt WHERE voor aggregaten.SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Meerdere aggregaten per groep berekend in één doorloop.SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Berekent meerdere groeperingen in één statement; sleutels buiten de huidige set retourneren NULL.SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Steno voor hiërarchiegebaseerde grouping sets; voegt subtotalen en een totaal toe.SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Steno voor elke combinatie van de opgegeven sleutels als grouping sets.SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Combineert gewone groeperingssleutels met grouping sets in één clausule.SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Houdt de eerste rij per sleutel in sorteervolgorde aan. Postgres-extensie.SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct en geavanceerd
Aantal unieke waarden die niet NULL zijn. Dedupliceert eerst.SELECT COUNT(DISTINCT user_id) FROM orders
Schat het aantal distincte waarden met een begrensde fout; gebouwd voor grote inputs.SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Voegt strings die niet NULL zijn samen met een scheidingsteken.SELECT STRING_AGG(user_id::text, ',') FROM orders
Voegt strings die niet NULL zijn samen; de MySQL-naam voor STRING_AGG.SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Verzamelt inputwaarden die niet NULL zijn in een array.SELECT ARRAY_AGG(total) FROM orders
Verzamelt inputrijen in een JSON-array; de JSONB-vorm slaat geparste binaire data op.SELECT JSONB_AGG(user_id) FROM orders
TRUE wanneer elke / één van de inputwaarden die niet NULL zijn, waar is.SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Standaardalias voor BOOL_AND.SELECT EVERY(total > 0) FROM orders
Geïnterpoleerde / percentiel op de dichtstbijzijnde rang over de gesorteerde input; vereist WITHIN GROUP.SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Meest voorkomende inputwaarde; een ordered-set-aggregaat in Postgres.SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Geeft de sorteervolgorde door aan ordered-set- en hypothetical-set-aggregaten.SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Beperkt het aggregaat tot de rijen die aan de voorwaarde voldoen.SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Sorteert waarden voordat het aggregaat ze samenvoegt of verzamelt.SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) en COUNT(1) tellen elke rij; COUNT(col) slaat NULL-input over.SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Steekproefstandaarddeviatie van numerieke waarden die niet NULL zijn. STDDEV_POP geeft de populatievorm; de standaard van de korte naam verschilt per engine.SELECT STDDEV(total) FROM orders
Steekproefvariantie van numerieke waarden die niet NULL zijn (kwadraat van STDDEV). VAR_SAMP en VAR_POP benoemen elke vorm.SELECT VARIANCE(total) FROM orders