Skip to content

Агрегатні функції SQL пояснені

Агрегатні функції SQL, GROUP BY, HAVING та distinct/розширені агрегати з повертаємими значеннями та однорядковими прикладами на таблиці orders.

Агрегатні функції згортають багато рядків в один скалярний результат. GROUP BY розбиває рядки за ключем до агрегації. HAVING фільтрує групи після агрегації. NULL-входи пропускаються кожним агрегатом, крім COUNT(*).

Довідкова таблиця · 29 записи
29 of 29 rows
Скалярні
Кількість ненульових вхідних значень; COUNT(*) рахує всі рядки.SELECT COUNT(*) FROM orders
Сума ненульових числових значень. Повертає NULL для порожньої множини.SELECT SUM(total) FROM orders
Середнє арифметичне ненульових числових значень. NULL-входи ігноруються.SELECT AVG(total) FROM orders
Найменше ненульове значення серед будь-якого порівнянного типу.SELECT MIN(total) FROM orders
Найбільше ненульове значення серед будь-якого порівнянного типу.SELECT MAX(total) FROM orders
Групові
Розбиває вхідні рядки за ключем; агрегати виконуються для кожного розділу.SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Предикат, який обчислюється для кожної групи після агрегації. Заміняє WHERE для агрегатів.SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Кілька агрегатів обчислюються для групи за один прохід.SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Обчислює кілька групувань в одному операторі; ключі поза поточним набором повертають NULL.SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Скорочення для групувальних наборів за ієрархією; додає проміжні та загальний підсумки.SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Скорочення для всіх комбінацій перелічених ключів як групувальних наборів.SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Поєднує звичайні ключі групування з grouping sets в одному реченні.SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Зберігає перший рядок для кожного ключа в порядку сортування. Розширення Postgres.SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct і розширені
Кількість унікальних ненульових значень. Спершу прибирає дублікати.SELECT COUNT(DISTINCT user_id) FROM orders
Оцінює кількість різних значень з обмеженою похибкою; створена для великих вхідних даних.SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Об'єднує ненульові рядки з роздільником.SELECT STRING_AGG(user_id::text, ',') FROM orders
Об'єднує ненульові рядки; назва STRING_AGG у MySQL.SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Збирає ненульові вхідні значення в масив.SELECT ARRAY_AGG(total) FROM orders
Збирає вхідні рядки в JSON-масив; форма JSONB зберігає розібрані двійкові дані.SELECT JSONB_AGG(user_id) FROM orders
TRUE, коли кожне / будь-яке ненульове вхідне значення дорівнює true.SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Стандартний псевдонім BOOL_AND.SELECT EVERY(total > 0) FROM orders
Інтерпольований / найближчий за рангом перцентиль над відсортованим входом; потребує WITHIN GROUP.SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Найчастіше вхідне значення; агрегат упорядкованої множини в Postgres.SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Передає порядок сортування агрегатам упорядкованої та гіпотетичної множини.SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Обмежує агрегат рядками, які проходять умову.SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Сортує значення перед тим, як агрегат їх об'єднає чи збере.SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) і COUNT(1) рахують кожен рядок; COUNT(col) пропускає NULL-входи.SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Вибіркове стандартне відхилення ненульових числових значень. STDDEV_POP дає форму для генеральної сукупності; типова поведінка голої назви відрізняється між рушіями.SELECT STDDEV(total) FROM orders
Вибіркова дисперсія ненульових числових значень (квадрат STDDEV). VAR_SAMP і VAR_POP називають кожну форму.SELECT VARIANCE(total) FROM orders