Funcțiile de agregare SQL, GROUP BY, HAVING și agregatele distinct/avansate, asociate cu valorile returnate și exemple pe o singură linie pe un tabel orders.
Funcțiile de agregare comprimă mai multe rânduri într-un singur rezultat scalar. GROUP BY partiționează rândurile după cheie înainte de agregare. HAVING filtrează grupurile după agregare. Valorile NULL de intrare sunt omise de fiecare agregat, cu excepția lui COUNT(*).
Tabel de referință · 29 intrări
Funcții de agregare SQLExplained
29 of 29 rows
Scalare
Numărul valorilor de intrare care nu sunt NULL; COUNT(*) numără toate rândurile.
SELECT COUNT(*) FROM orders
Suma valorilor numerice care nu sunt NULL. Returnează NULL pentru un set gol.
SELECT SUM(total) FROM orders
Media aritmetică a valorilor numerice care nu sunt NULL. Valorile NULL sunt ignorate.
SELECT AVG(total) FROM orders
Cea mai mică valoare care nu este NULL, pentru orice tip comparabil.
SELECT MIN(total) FROM orders
Cea mai mare valoare care nu este NULL, pentru orice tip comparabil.
SELECT MAX(total) FROM orders
Grupate
Partiționează rândurile de intrare după cheie; agregatele rulează per partiție.
SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Predicat evaluat per grup după agregare. Înlocuiește WHERE pentru agregate.
SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Mai multe agregate calculate per grup într-o singură trecere.
SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Calculează mai multe grupări într-o singură instrucțiune; cheile din afara setului curent returnează NULL.
SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Formă scurtă pentru seturile de grupare bazate pe ierarhie; adaugă subtotaluri și un total general.
SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Formă scurtă pentru fiecare combinație a cheilor date, ca seturi de grupare.
SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Combină chei de grupare simple cu seturi de grupare într-o singură clauză.
SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Păstrează primul rând per cheie în ordinea de sortare. Extensie Postgres.
SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct și avansate
Numărul valorilor unice care nu sunt NULL. Elimină duplicatele mai întâi.
SELECT COUNT(DISTINCT user_id) FROM orders
Estimează numărul valorilor distincte cu o eroare limitată; conceput pentru volume mari de date.
SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Concatenează stringurile care nu sunt NULL cu un delimitator.
SELECT STRING_AGG(user_id::text, ',') FROM orders
Concatenează stringurile care nu sunt NULL; numele MySQL pentru STRING_AGG.
SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Colectează valorile de intrare care nu sunt NULL într-un array.
SELECT ARRAY_AGG(total) FROM orders
Colectează rândurile de intrare într-un array JSON; forma JSONB stochează date binare parsate.
SELECT JSONB_AGG(user_id) FROM orders
TRUE când fiecare / oricare dintre valorile de intrare care nu sunt NULL este adevărată.
SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Alias standard pentru BOOL_AND.
SELECT EVERY(total > 0) FROM orders
Percentilă interpolată / de rang cel mai apropiat peste intrarea sortată; necesită WITHIN GROUP.
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Cea mai frecventă valoare de intrare; un agregat de set ordonat în Postgres.
SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Transmite ordinea de sortare către agregatele de set ordonat și de set ipotetic.
SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Restricționează agregatul la rândurile care îndeplinesc condiția.
SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Sortează valorile înainte ca agregatul să le concateneze sau să le colecteze.
SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) și COUNT(1) numără fiecare rând; COUNT(col) omite valorile NULL.
SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Deviația standard a eșantionului pentru valorile numerice care nu sunt NULL. STDDEV_POP dă forma pentru populație; comportamentul numelui simplu diferă per motor.
SELECT STDDEV(total) FROM orders
Varianța eșantionului pentru valorile numerice care nu sunt NULL (pătratul lui STDDEV). VAR_SAMP și VAR_POP denumesc fiecare formă.