Funkcje agregujące SQL, GROUP BY, HAVING oraz agregaty distinct/zaawansowane, przypisane do zwracanych wartości i jednolinijkowych przykładów na tabeli orders.
Funkcje agregujące zwijają wiele wierszy w jeden skalarny wynik. GROUP BY dzieli wiersze według klucza przed agregacją. HAVING filtruje grupy po agregacji. Wartości NULL na wejściu są pomijane przez każdy agregat z wyjątkiem COUNT(*).
Tabela referencyjna · 29 wpisy
Funkcje agregujące SQLExplained
29 of 29 rows
Skalarne
Liczba wartości wejściowych innych niż NULL; COUNT(*) liczy wszystkie wiersze.
SELECT COUNT(*) FROM orders
Suma liczbowych wartości innych niż NULL. Zwraca NULL dla pustego zbioru.
SELECT SUM(total) FROM orders
Średnia arytmetyczna liczbowych wartości innych niż NULL. Wartości NULL są ignorowane.
SELECT AVG(total) FROM orders
Najmniejsza wartość inna niż NULL, dla dowolnego typu porównywalnego.
SELECT MIN(total) FROM orders
Największa wartość inna niż NULL, dla dowolnego typu porównywalnego.
SELECT MAX(total) FROM orders
Zgrupowane
Dzieli wiersze wejściowe według klucza; agregaty są liczone dla każdej partycji.
SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Predykat oceniany dla każdej grupy po agregacji. Zastępuje WHERE dla agregatów.
SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Kilka agregatów liczonych dla każdej grupy w jednym przebiegu.
SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Liczy kilka grupowań w jednej instrukcji; klucze poza bieżącym zbiorem zwracają NULL.
SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Skrót dla zestawów grupowania opartych na hierarchii; dodaje sumy częściowe i sumę całkowitą.
SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Skrót dla każdej kombinacji podanych kluczy jako zestawów grupowania.
SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Łączy zwykłe klucze grupowania z zestawami grupowania w jednej klauzuli.
SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Zachowuje pierwszy wiersz dla każdego klucza w porządku sortowania. Rozszerzenie Postgresa.
SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct i zaawansowane
Liczba unikalnych wartości innych niż NULL. Najpierw usuwa duplikaty.
SELECT COUNT(DISTINCT user_id) FROM orders
Szacuje liczbę odrębnych wartości z ograniczonym błędem; stworzony dla dużych zbiorów.
SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Łączy stringi inne niż NULL separatorem.
SELECT STRING_AGG(user_id::text, ',') FROM orders
Łączy stringi inne niż NULL; nazwa STRING_AGG w MySQL-u.
SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Zbiera wartości wejściowe inne niż NULL w tablicę.
SELECT ARRAY_AGG(total) FROM orders
Zbiera wiersze wejściowe w tablicę JSON; forma JSONB zapisuje sparsowane dane binarne.
SELECT JSONB_AGG(user_id) FROM orders
TRUE, gdy każda / dowolna wartość wejściowa inna niż NULL jest prawdziwa.
SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Standardowy alias dla BOOL_AND.
SELECT EVERY(total > 0) FROM orders
Percentyl interpolowany / o najbliższej randze na posortowanym wejściu; wymaga WITHIN GROUP.
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Najczęściej występująca wartość wejściowa; agregat zbioru uporządkowanego w Postgresie.
SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Przekazuje porządek sortowania do agregatów zbioru uporządkowanego i zbioru hipotetycznego.
SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Ogranicza agregat do wierszy spełniających warunek.
SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Sortuje wartości, zanim agregat je połączy lub zbierze.
SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) i COUNT(1) liczą każdy wiersz; COUNT(col) pomija wartości NULL.
SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Próbkowe odchylenie standardowe liczbowych wartości innych niż NULL. STDDEV_POP daje formę populacyjną; domyślna postać samej nazwy różni się między silnikami.
SELECT STDDEV(total) FROM orders
Próbkowa wariancja liczbowych wartości innych niż NULL (kwadrat STDDEV). VAR_SAMP i VAR_POP nazywają każdą formę.