Skip to content

Aggregatfunktioner i SQL förklarade

Aggregatfunktioner i SQL, GROUP BY, HAVING samt distinct/avancerade aggregat, kopplade till returvärden och enradsexempel på en orders-tabell.

Aggregatfunktioner slår samman många rader till ett skalärt resultat. GROUP BY partitionerar rader efter nyckel före aggregeringen. HAVING filtrerar grupper efter aggregeringen. NULL-input hoppas över av alla aggregat utom COUNT(*).

Referenstabell · 29 poster
29 of 29 rows
Skalära
Antal inputvärden som inte är NULL; COUNT(*) räknar alla rader.SELECT COUNT(*) FROM orders
Summan av numeriska värden som inte är NULL. Returnerar NULL för ett tomt set.SELECT SUM(total) FROM orders
Aritmetiskt medelvärde av numeriska värden som inte är NULL. NULL-input ignoreras.SELECT AVG(total) FROM orders
Minsta värde som inte är NULL, för varje jämförbar typ.SELECT MIN(total) FROM orders
Största värde som inte är NULL, för varje jämförbar typ.SELECT MAX(total) FROM orders
Grupperade
Partitionerar inputrader efter nyckel; aggregaten körs per partition.SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Predikat som utvärderas per grupp efter aggregeringen. Ersätter WHERE för aggregat.SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Flera aggregat beräknade per grupp i en enda genomgång.SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Beräknar flera grupperingar i en sats; nycklar utanför det aktuella setet returnerar NULL.SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Kortform för hierarkibaserade grupperingsset; lägger till delsummor och en totalsumma.SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Kortform för varje kombination av de angivna nycklarna som grupperingsset.SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Blandar vanliga gruppanycklar med grupperingsset i en enda klausul.SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Behåller den första raden per nyckel i sorteringsordningen. Postgres-tillägg.SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct och avancerade
Antal unika värden som inte är NULL. Tar bort dubbletter först.SELECT COUNT(DISTINCT user_id) FROM orders
Uppskattar antalet distinkta värden med ett begränsat fel; byggt för stora datamängder.SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Sammanfogar strängar som inte är NULL med en avgränsare.SELECT STRING_AGG(user_id::text, ',') FROM orders
Sammanfogar strängar som inte är NULL; MySQL-namnet på STRING_AGG.SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Samlar inputvärden som inte är NULL i en array.SELECT ARRAY_AGG(total) FROM orders
Samlar inputraderna i en JSON-array; JSONB-formen lagrar tolkad binärdata.SELECT JSONB_AGG(user_id) FROM orders
SANT när varje / något av inputvärdena som inte är NULL är sant.SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Standardalias för BOOL_AND.SELECT EVERY(total > 0) FROM orders
Interpolerad / percentil med närmaste rankning över det sorterade inputet; kräver WITHIN GROUP.SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Vanligast förekommande inputvärde; ett aggregat för ordnade set i Postgres.SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
För vidare sorteringsordningen till aggregat för ordnade set och hypotetiska set.SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Begränsar aggregatet till de rader som uppfyller villkoret.SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Sorterar värdena innan aggregatet sammanfogar eller samlar dem.SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) och COUNT(1) räknar varje rad; COUNT(col) hoppar över NULL-input.SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Urvalsstandardavvikelse för numeriska värden som inte är NULL. STDDEV_POP ger populationsformen; standarden för det korta namnet skiljer sig mellan motorer.SELECT STDDEV(total) FROM orders
Urvalsvarians för numeriska värden som inte är NULL (kvadraten av STDDEV). VAR_SAMP och VAR_POP namnger varje form.SELECT VARIANCE(total) FROM orders