Funzioni di aggregazione SQL, GROUP BY, HAVING e aggregati distinct/avanzati mappati ai valori restituiti e a esempi di una riga su una tabella orders.
Le funzioni di aggregazione riducono molte righe a un unico risultato scalare. GROUP BY partiziona le righe per chiave prima di aggregare. HAVING filtra i gruppi dopo l'aggregazione. Gli input NULL vengono ignorati da ogni aggregato tranne COUNT(*).
Tabella di riferimento · 29 voci
Funzioni di aggregazione SQLExplained
29 of 29 rows
Scalari
Conteggio dei valori di input non NULL; COUNT(*) conta tutte le righe.
SELECT COUNT(*) FROM orders
Somma dei valori numerici non NULL. Restituisce NULL su un insieme vuoto.
SELECT SUM(total) FROM orders
Media aritmetica dei valori numerici non NULL. Gli input NULL vengono ignorati.
SELECT AVG(total) FROM orders
Il valore non NULL più piccolo su qualsiasi tipo ordinabile.
SELECT MIN(total) FROM orders
Il valore non NULL più grande su qualsiasi tipo ordinabile.
SELECT MAX(total) FROM orders
Raggruppate
Partiziona le righe di input per chiave; gli aggregati girano per partizione.
SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Predicato valutato per gruppo dopo l'aggregazione. Sostituisce WHERE per gli aggregati.
SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Più aggregati calcolati per gruppo in un solo passaggio.
SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Calcola più raggruppamenti in un'unica istruzione; le chiavi fuori dall'insieme corrente restituiscono NULL.
SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Abbreviazione per grouping set gerarchici; aggiunge subtotali e un totale complessivo.
SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Abbreviazione per ogni combinazione delle chiavi elencate come grouping set.
SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Mescola chiavi di gruppo semplici con grouping set in un'unica clausola.
SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Mantiene la prima riga per chiave nell'ordine di ordinamento. Estensione di Postgres.
SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct e avanzati
Conteggio di valori unici non NULL. Deduplica prima.
SELECT COUNT(DISTINCT user_id) FROM orders
Stima il conteggio dei valori distinct con errore limitato; pensata per input di grandi dimensioni.
SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Concatena stringhe non NULL con un delimitatore.
SELECT STRING_AGG(user_id::text, ',') FROM orders
Concatena stringhe non NULL; il nome MySQL di STRING_AGG.
SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Raccoglie i valori di input non NULL in un array.
SELECT ARRAY_AGG(total) FROM orders
Raccoglie le righe di input in un array JSON; la forma JSONB memorizza binario già interpretato.
SELECT JSONB_AGG(user_id) FROM orders
TRUE quando tutti / almeno uno dei valori di input non NULL è vero.
SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Alias standard di BOOL_AND.
SELECT EVERY(total > 0) FROM orders
Percentile interpolato / a rango più vicino sull'input ordinato; richiede WITHIN GROUP.
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Il valore di input più frequente; un aggregato ordered-set in Postgres.
SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Passa l'ordinamento agli aggregati ordered-set e hypothetical-set.
SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Limita l'aggregato alle righe che superano la condizione.
SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Ordina i valori prima che l'aggregato li concateni o li raccolga.
SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) e COUNT(1) contano ogni riga; COUNT(col) salta gli input NULL.
SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Deviazione standard campionaria dei valori numerici non NULL. STDDEV_POP dà la forma di popolazione; il default del nome semplice cambia per motore.
SELECT STDDEV(total) FROM orders
Varianza campionaria dei valori numerici non NULL (quadrato di STDDEV). VAR_SAMP e VAR_POP danno un nome a ciascuna forma.