Агрегатные функции
Агрегатные функции — это функции, которые объединяют значения из нескольких строк в одно.
Агрегатные функции отличаются от скалярных функций и оконных функций тем, что они изменяют кардинальность результата. Поэтому в запросах их можно использовать только в выражениях SELECT и HAVING.
Выражение DISTINCT в агрегатных функциях
Когда используется выражение DISTINCT, при вычислении значения агрегатной функции учитываются только уникальные значения. Часто это выражение используется в сочетании с агрегатной функцией count() для получения количества уникальных элементов, но может использоваться и с другими агрегатными функциями.
Пример
CREATE TABLE cities(city_name VARCHAR);
INSERT INTO cities VALUES
('Moscow'),
('Moscow'),
('Paris'),
('Madrid');
SELECT
count(DISTINCT city_name) AS distinct_cities_num,
count(city_name) AS cities_num
FROM cities;
+---------------------+------------+
| distinct_cities_num | cities_num |
+---------------------+------------+
| 3 | 4 |
+---------------------+------------+
any_value()
| Описание |
Возвращает первое значение из |
| Использование |
|
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE numbers(number_asc BIGINT, number_desc BIGINT);
INSERT INTO numbers VALUES
(NULL, 3),
(1, 2),
(2, 1),
(3, NULL);
SELECT
any_value(number_asc) AS "any value from number asc",
any_value(number_desc) AS "any value from number desc"
FROM numbers;
+---------------------------+----------------------------+
| any value from number asc | any value from number desc |
+---------------------------+----------------------------+
| 1 | 3 |
+---------------------------+----------------------------+
approx_count_distinct()
| Описание |
Вычисляет приблизительное количество уникальных значений. |
| Использование |
|
Вычисляет приблизительное количество уникальных значений в колонке с помощью вероятностного алгоритма HyperLogLog.
Удобно использовать для быстрого подсчета количества уникальных значений. На больших таблицах работает быстрее, чем COUNT(DISTINCT).
|
Посмотреть пример
WITH test AS (
SELECT
(generate_series % 1000000) AS col1
FROM generate_series(1, 100000000)
)
SELECT
approx_count_distinct(col1) AS result
FROM test;
+--------+
| result |
+--------+
| 962761 |
+--------+
approx_quantile()
| Описание |
Вычисляет приблизительный квантиль. |
| Использование |
|
Вычисляет приблизительный квантиль числовых значений с помощью алгоритма T-Digest.
Посмотреть пример
WITH test AS (
SELECT
(generate_series % 500) + (generate_series % 10) AS col1
FROM generate_series(1, 10000000)
)
SELECT
approx_quantile(col1, 0.95) AS result
FROM test;
+--------+
| result |
+--------+
| 479 |
+--------+
approx_top_k()
| Описание |
Вычисляет приблизительный список из |
| Использование |
|
Вычисляет приблизительный список из k наиболее часто встречающихся значений, используя метод Filtered Space-Saving.
Посмотреть пример
WITH test AS (
SELECT
CASE
WHEN generate_series % 10 = 0 THEN 'A'
WHEN generate_series % 5 = 0 THEN 'B'
WHEN generate_series % 3 = 0 THEN 'C'
ELSE 'D'
END AS col1
FROM generate_series(1, 10000000)
)
SELECT
approx_top_k(col1, 3) AS result
FROM test;
+---------+
| result |
+---------+
| {D,C,B} |
+---------+
arg_max()
| Описание |
Находит строку с максимальным значением одной колонки и возвращает значение другой колонки в этой строке. |
| Использование |
|
| Псевдонимы |
|
Находит строку с максимальным значением колонки argument2 и возвращает значение колонки argument1 в этой строке. Строки со значением NULL игнорируются.
Если задан третий аргумент, то возвращается список длины n значений колонки argument1, соответствующих найденному топ-n значений колонки argument2.
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть примеры
CREATE TABLE demo (num BIGINT, letter VARCHAR);
INSERT INTO demo VALUES
(1, 'A'),
(2, 'B'),
(3, 'C'),
(3, NULL),
(4, NULL);
SELECT
arg_max(letter, num) AS result
FROM demo;
+--------+
| result |
+--------+
| C |
+--------+
CREATE TABLE demo (num BIGINT, letter VARCHAR);
INSERT INTO demo VALUES
(1, 'A'),
(2, 'B'),
(3, 'C'),
(3, NULL),
(4, NULL);
SELECT
arg_max(letter, num, 2) AS result
FROM demo;
+--------+
| result |
+--------+
| {C,B} |
+--------+
arg_max_null()
| Описание |
Находит строку с максимальным значением одной колонки и возвращает значение другой колонки в этой строке (даже если оно пустое). |
| Использование |
|
Находит строку с максимальным значением колонки argument2 и возвращает значение колонки argument1 в этой строке. Если в колонке argument1 значение NULL, то возвращается оно.
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE demo (num BIGINT, letter VARCHAR);
INSERT INTO demo VALUES
(1, 'A'),
(2, 'B'),
(3, 'C'),
(3, NULL),
(4, NULL);
SELECT
arg_max_null(letter, num) AS result
FROM demo;
+--------+
| result |
+--------+
| null |
+--------+
arg_min()
| Описание |
Находит строку с минимальным значением одной колонки и возвращает значение другой колонки в этой строке. |
| Использование |
|
| Псевдонимы |
|
Находит строку с минимальным значением колонки argument2 и возвращает значение колонки argument1 в этой строке. Строки со значением NULL игнорируются.
Если задан третий аргумент, то возвращается список длины n значений колонки argument1, соответствующих найденному топ-n значений колонки argument2, упорядоченных по возрастанию.
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть примеры
CREATE TABLE demo (num BIGINT, letter VARCHAR);
INSERT INTO demo VALUES
(0, NULL),
(1, NULL),
(1, 'A'),
(2, 'B'),
(3, 'C');
SELECT
arg_min(letter, num) AS result
FROM demo;
+--------+
| result |
+--------+
| A |
+--------+
CREATE TABLE demo (num BIGINT, letter VARCHAR);
INSERT INTO demo VALUES
(0, NULL),
(1, NULL),
(1, 'A'),
(2, 'B'),
(3, 'C');
SELECT
arg_min(letter, num, 2) AS result
FROM demo;
+--------+
| result |
+--------+
| {A,B} |
+--------+
arg_min_null()
| Описание |
Находит строку с минимальным значением одной колонки и возвращает значение другой колонки в этой строке (даже если оно пустое). |
| Использование |
|
Находит строку с минимальным значением колонки argument2 и возвращает значение колонки argument1 в этой строке. Если в колонке argument1 значение NULL, то возвращается оно.
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE demo (num BIGINT, letter VARCHAR);
INSERT INTO demo VALUES
(0, NULL),
(1, NULL),
(1, 'A'),
(2, 'B'),
(3, 'C');
SELECT
arg_min_null(letter, num) AS result
FROM demo;
+--------+
| result |
+--------+
| null |
+--------+
array_agg()
| Описание |
Возвращает список, содержащий все значения колонки. |
| Использование |
|
| Псевдонимы |
|
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
array_agg(number) AS array_agg,
list(number) AS list
FROM numbers;
+--------------+--------------+
| array_agg | list |
+--------------+--------------+
| {1,2,3,None} | {1,2,3,None} |
+--------------+--------------+
avg()
| Описание |
Вычисляет среднее значение всех непустых значений в группе. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
avg(number) AS average,
mean(number) AS mean
FROM numbers;
+---------+------+
| average | mean |
+---------+------+
| 2 | 2 |
+---------+------+
bit_and()
| Описание |
Возвращает побитовое |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(3),
(5),
(7),
(NULL);
SELECT
bit_and(number) AS result
FROM numbers;
+--------+
| result |
+--------+
| 1 |
+--------+
bit_or()
| Описание |
Возвращает побитовое |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(3),
(5),
(7),
(NULL);
SELECT
bit_or(number) AS result
FROM numbers;
+--------+
| result |
+--------+
| 7 |
+--------+
bit_xor()
| Описание |
Возвращает побитовое исключающее |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(1),
(2),
(2),
(3),
(NULL);
SELECT
bit_xor(number) AS result
FROM numbers;
+--------+
| result |
+--------+
| 3 |
+--------+
bitstring_agg()
| Описание |
Возвращает битовую строку, длина которой соответствует диапазону ненулевых (целочисленных) значений. |
| Использование |
|
Возвращает битовую строку, длина которой соответствует диапазону ненулевых (целочисленных) значений. При этом биты установлены в позиции каждого (уникального) значения.
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(1),
(2),
(2),
(3),
(NULL);
SELECT
bit_count(bitstring_agg(number)) AS result
FROM numbers;
+--------+
| result |
+--------+
| 3 |
+--------+
bool_and()
| Описание |
Возвращает |
| Использование |
|
Посмотреть пример
CREATE TABLE demo(col1 BOOL, col2 BOOL, col3 BOOL);
INSERT INTO demo VALUES
(true, true, true),
(true, true, true),
(false, true, true),
(true, true, true),
(NULL, true, NULL);
SELECT
bool_and(col1) AS result_1,
bool_and(col2) AS result_2,
bool_and(col3) AS result_3,
FROM demo;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| false | true | true |
+----------+----------+----------+
bool_or()
| Описание |
Возвращает |
| Использование |
|
Посмотреть пример
CREATE TABLE demo(col1 BOOL, col2 BOOL, col3 BOOL);
INSERT INTO demo VALUES
(true, false, false),
(true, false, false),
(false, false, false),
(true, false, false),
(NULL, false, NULL);
SELECT
bool_or(col1) AS result_1,
bool_or(col2) AS result_2,
bool_or(col3) AS result_3,
FROM demo;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| true | false | false |
+----------+----------+----------+
count()
| Описание |
Вычисляет количество строк в группе. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
count() AS rows_count,
count(*) AS rows_count_star
FROM numbers;
+------------+-----------------+
| rows_count | rows_count_star |
+------------+-----------------+
| 4 | 4 |
+------------+-----------------+
count(argument)
| Описание |
Вычисляет количество непустых значений в группе. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
count() AS rows_count,
count(number) AS values_count
FROM numbers;
+------------+--------------+
| rows_count | values_count |
+------------+--------------+
| 4 | 3 |
+------------+--------------+
corr()
| Описание |
Вычисляет коэффициент корреляции. |
| Использование |
|
| Формула |
|
Посмотреть пример
CREATE TABLE numbers(number_1 BIGINT, number_2 BIGINT);
INSERT INTO numbers VALUES
(1, 1),
(2, 2),
(3, 30),
(NULL, NULL);
SELECT
corr(number_1, number_2) AS result
FROM numbers;
+--------------------+
| result |
+--------------------+
| 0.8808122718846411 |
+--------------------+
covar_pop()
| Описание |
Вычисляет ковариацию генеральной совокупности (не включает коррекцию смещения). |
| Использование |
|
| Формула |
|
Посмотреть пример
CREATE TABLE numbers(number_1 BIGINT, number_2 BIGINT);
INSERT INTO numbers VALUES
(1, 1),
(2, 2),
(3, 30),
(NULL, NULL);
SELECT
covar_pop(number_1, number_2) AS result
FROM numbers;
+-------------------+
| result |
+-------------------+
| 9.666666666666666 |
+-------------------+
covar_samp()
| Описание |
Вычисляет выборочную ковариацию, включающую поправку Бесселя на смещение. |
| Использование |
|
| Формула |
|
| Псевдонимы |
|
Посмотреть пример
CREATE TABLE numbers(number_1 BIGINT, number_2 BIGINT);
INSERT INTO numbers VALUES
(1, 1),
(2, 2),
(3, 30),
(NULL, NULL);
SELECT
covar_samp(number_1, number_2) AS result
FROM numbers;
+--------+
| result |
+--------+
| 14.5 |
+--------+
count_if()
| Описание |
Возвращает количество записей, удовлетворяющих условию, или |
| Использование |
|
| Псевдоним |
|
Посмотреть пример
CREATE TABLE text_table(text_data VARCHAR);
INSERT INTO text_table VALUES
('Tengri'),
('Tengri'),
('TNGRi'),
(NULL);
SELECT
COUNT_IF(TRUE) AS row_number,
COUNT_IF(text_data = 'Tengri') AS tengri_number
FROM text_table;
+------------+---------------+
| row_number | tengri_number |
+------------+---------------+
| 4 | 2 |
+------------+---------------+
entropy()
| Описание |
Вычисляет логарифмическую энтропию по основанию 2. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number_1 BIGINT, number_2 BIGINT);
INSERT INTO numbers VALUES
(1, 1),
(2, 2),
(3, 2),
(NULL, NULL);
SELECT
entropy(number_1) AS result_1,
entropy(number_2) AS result_2
FROM numbers;
+--------------------+--------------------+
| result_1 | result_2 |
+--------------------+--------------------+
| 1.5849625007211559 | 0.9182958340544893 |
+--------------------+--------------------+
favg()
| Описание |
Вычисляет среднее значение с помощью алгоритма Kahan Sum. |
| Использование |
|
Вычисляет среднее значение с помощью алгоритма Kahan Sum.
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
favg(number) AS result
FROM numbers;
+--------+
| result |
+--------+
| 2 |
+--------+
first()
| Описание |
Возвращает первое значение из группы. |
| Использование |
|
| Псевдонимы |
|
Возвращает первое значение из группы.
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE weekdays (name VARCHAR, weekend BOOL);
INSERT INTO weekdays VALUES
('Monday', False),
('Tuesday', False),
('Wednesday', False),
('Thursday', False),
('Friday', False),
('Saturday', True),
('Sunday', True);
SELECT
first(name) AS first_day,
weekend
FROM weekdays
GROUP BY weekend;
+-----------+---------+
| first_day | weekend |
+-----------+---------+
| Monday | false |
+-----------+---------+
| Saturday | true |
+-----------+---------+
fsum()
| Описание |
Вычисляет сумму непустых значений в группе с помощью алгоритма Kahan Sum. |
| Использование |
|
| Псевдонимы |
|
Вычисляет сумму непустых значений в группе с помощью алгоритма Kahan Sum.
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
fsum(number) AS result
FROM numbers;
+--------+
| result |
+--------+
| 6 |
+--------+
geometric_mean()
| Описание |
Вычисляет геометрическое среднее непустых значений в группе. |
| Использование |
|
| Псевдонимы |
|
Вычисляет геометрическое среднее непустых значений в группе.
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
geometric_mean(number) AS result
FROM numbers;
+--------------------+
| result |
+--------------------+
| 1.8171205928321397 |
+--------------------+
histogram()
| Описание |
Возвращает словарь уникальных непустых значений в группе с количеством их вхождений. |
| Использование |
|
Возвращает словарь уникальных непустых значений в группе с количеством их вхождений.
Если задан аргумент boundaries_list, то диапазон всех значений разбивается по границам, заданным в этом списке, и возвращается количество значений в каждом интервале.
Посмотреть примеры
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(1),
(1),
(2),
(2),
(3),
(NULL);
SELECT
histogram(number) AS result
FROM numbers;
+--------------------------------------------------------------------------+
| result |
+--------------------------------------------------------------------------+
| [{"key": 1, "value": 3}, {"key": 2, "value": 2}, {"key": 3, "value": 1}] |
+--------------------------------------------------------------------------+
WITH numbers AS (
SELECT unnest(generate_series(1, 10)) as number
)
SELECT
histogram(number, [1,5,10]) AS result
FROM numbers;
+---------------------------------------------------------------------------+
| result |
+---------------------------------------------------------------------------+
| [{"key": 1, "value": 1}, {"key": 5, "value": 4}, {"key": 10, "value": 5}] |
+---------------------------------------------------------------------------+
histogram_exact()
| Описание |
Возвращает словарь указанных значений в группе с количеством их вхождений. |
| Использование |
|
Возвращает словарь указанных в elements_list значений в группе с количеством их вхождений.
Все значения, которых нет в списке elements_list, попадают в отдельную группу значений.
Пустые значения игнорируются.
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(1),
(1),
(2),
(2),
(3),
(NULL);
SELECT
histogram_exact(number, [2, 3]) AS result
FROM numbers;
+--------------------------------------------------------------------------------------------+
| result |
+--------------------------------------------------------------------------------------------+
| [{"key": 2, "value": 2}, {"key": 3, "value": 1}, {"key": 9223372036854775807, "value": 3}] |
+--------------------------------------------------------------------------------------------+
kurtosis()
| Описание |
Вычисляет эксцесс (по определению Фишера) с поправкой на смещение в зависимости от размера выборки. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number_1 BIGINT, number_2 BIGINT);
INSERT INTO numbers VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 400),
(NULL, NULL);
SELECT
kurtosis(number_1) AS result_1,
kurtosis(number_2) AS result_2
FROM numbers;
+--------------------+--------------------+
| result_1 | result_2 |
+--------------------+--------------------+
| -1.200000000000001 | 3.9996633187929866 |
+--------------------+--------------------+
kurtosis_pop()
| Описание |
Вычисляет эксцесс (по определению Фишера) без поправки на смещение выборки. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number_1 BIGINT, number_2 BIGINT);
INSERT INTO numbers VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 400),
(NULL, NULL);
SELECT
kurtosis_pop(number_1) AS result_1,
kurtosis_pop(number_2) AS result_2
FROM numbers;
+----------+---------------------+
| result_1 | result_2 |
+----------+---------------------+
| -1.36 | -0.6667115574942684 |
+----------+---------------------+
last()
| Описание |
Возвращает последнее значение из группы. |
| Использование |
|
Возвращает последнее значение из группы.
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE weekdays (name VARCHAR, weekend BOOL);
INSERT INTO weekdays VALUES
('Monday', False),
('Tuesday', False),
('Wednesday', False),
('Thursday', False),
('Friday', False),
('Saturday', True),
('Sunday', True);
SELECT
last(name) AS last_day,
weekend
FROM weekdays
GROUP BY weekend;
+----------+---------+
| last_day | weekend |
+----------+---------+
| Friday | false |
+----------+---------+
| Sunday | true |
+----------+---------+
mad()
| Описание |
Вычисляет медианное абсолютное отклонение. |
| Использование |
|
| Формула |
|
Вычисляет медианное абсолютное отклонение. Типы даты и времени возвращают положительный интервал.
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(4),
(400),
(NULL);
SELECT
stddev_samp(number),
mad(number)
FROM numbers;
+--------------------+-----+
| stddev_samp | mad |
+--------------------+-----+
| 177.77092000661975 | 1 |
+--------------------+-----+
max()
| Описание |
Возвращает максимальное значение, имеющееся в группе. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
max(number),
min(number)
FROM numbers;
+-----+-----+
| max | min |
+-----+-----+
| 3 | 1 |
+-----+-----+
min()
| Описание |
Возвращает минимальное значение, имеющееся в группе. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
max(number),
min(number)
FROM numbers;
+-----+-----+
| max | min |
+-----+-----+
| 3 | 1 |
+-----+-----+
median()
| Описание |
Возвращает медианное значение всех непустых значений в группе. |
| Использование |
|
В случае четного количества значений берется среднее между двумя центральными значениями.
Посмотреть пример
Покажем разницу между медианным значением и средним значением (avg()) на примерах наборов из четного (_even) и нечетного (_odd) количества чисел, содержащих в том числе пустые значения.
CREATE TABLE numbers(
number_even BIGINT,
number_odd BIGINT);
INSERT INTO numbers VALUES
(1, 1),
(2, 2),
(3, 10),
(10, NULL),
(NULL, NULL);
SELECT
median(number_even) AS median_even,
avg(number_even) AS avg_even,
median(number_odd) AS median_odd,
avg(number_odd) AS avg_odd
FROM numbers;
+-------------+----------+------------+-------------------+
| median_even | avg_even | median_odd | avg_odd |
+-------------+----------+------------+-------------------+
| 2.5 | 4 | 2 | 4.333333333333333 |
+-------------+----------+------------+-------------------+
mode()
| Описание |
Возвращает самое частотное значение в группе. |
| Использование |
|
| На результат работы этой функции влияет порядок сортировки в таблице. |
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(2),
(3),
(NULL);
SELECT
mode(number) AS result,
FROM numbers;
+--------+
| result |
+--------+
| 2 |
+--------+
product()
| Описание |
Перемножает непустые значения в группе. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(NULL);
SELECT
product(number) AS result,
FROM numbers;
+--------+
| result |
+--------+
| 6 |
+--------+
quantile_cont()
| Описание |
Вычисляет интерполированный положительный квантиль. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(4),
(NULL);
SELECT
quantile_cont(number, 0.5) AS result_1,
quantile_cont(number, [0.25, 0.5, 0.75]) AS result_2
FROM numbers;
+----------+-----------------+
| result_1 | result_2 |
+----------+-----------------+
| 2.5 | {1.75,2.5,3.25} |
+----------+-----------------+
quantile_disc()
| Описание |
Вычисляет дискретный положительный квантиль. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(4),
(NULL);
SELECT
quantile_disc(number, 0.5) AS result_1,
quantile_disc(number, [0.25, 0.5, 0.75]) AS result_2
FROM numbers;
+----------+----------+
| result_1 | result_2 |
+----------+----------+
| 2 | {1,2,3} |
+----------+----------+
reservoir_quantile()
| Описание |
Вычисляет приблизительный квантиль с использованием резервуарного сплинтинга. |
| Использование |
|
Вычисляет приблизительный квантиль с использованием резервуарного сплинтинга.
В параметре sample_size можно задать размер выборки. По умолчанию используется значение 8192.
Посмотреть пример
WITH numbers AS (
SELECT unnest(generate_series(1000000)) as number
ORDER BY random()
)
SELECT
reservoir_quantile(number, 0.5),
quantile_cont(number, 0.5)
FROM numbers;
+--------------------+---------------+
| reservoir_quantile | quantile_cont |
+--------------------+---------------+
| 500201 | 500000 |
+--------------------+---------------+
sem()
| Описание |
Вычисляет стандартную ошибку среднего значения. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(4),
(NULL);
SELECT
mean(number) AS sample_mean,
sem(number) AS standard_error
FROM numbers;
+-------------+--------------------+
| sample_mean | standard_error |
+-------------+--------------------+
| 2.5 | 0.5590169943749475 |
+-------------+--------------------+
skewness()
| Описание |
Вычисляет коэффициент асимметрии. |
| Использование |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(40),
(NULL);
SELECT
skewness(number)
FROM numbers;
+-------------------+
| skewness |
+-------------------+
| 1.988947740397821 |
+-------------------+
stddev_pop()
| Описание |
Вычисляет стандартное отклонение генеральной совокупности. |
| Использование |
|
| Формула |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(4),
(NULL);
SELECT
stddev_pop(number),
stddev_samp(number)
FROM numbers;
+-------------------+--------------------+
| stddev_pop | stddev_samp |
+-------------------+--------------------+
| 1.118033988749895 | 1.2909944487358056 |
+-------------------+--------------------+
stddev_samp()
| Описание |
Вычисляет выборочное стандартное отклонение. |
| Использование |
|
| Формула |
|
| Псевдонимы |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(4),
(NULL);
SELECT
stddev_pop(number),
stddev_samp(number)
FROM numbers;
+-------------------+--------------------+
| stddev_pop | stddev_samp |
+-------------------+--------------------+
| 1.118033988749895 | 1.2909944487358056 |
+-------------------+--------------------+
string_agg()
| Описание |
Объединяет значения в одну текстовую строку через заданный разделитель. |
| Использование |
|
| Псевдонимы |
|
Если значения не являются текстовыми, то они приводятся к текстовым.
Посмотреть пример
CREATE TABLE weekdays (name VARCHAR, weekend BOOL);
INSERT INTO weekdays VALUES
('Monday', False),
('Tuesday', False),
('Wednesday', False),
('Thursday', False),
('Friday', False),
('Saturday', True),
('Sunday', True);
SELECT
string_agg(name, ', ') AS week_days,
weekend AS are_weekend
FROM weekdays
GROUP BY weekend;
+----------------------------------------------+-------------+
| week_days | are_weekend |
+----------------------------------------------+-------------+
| Monday, Tuesday, Wednesday, Thursday, Friday | false |
+----------------------------------------------+-------------+
| Saturday, Sunday | true |
+----------------------------------------------+-------------+
sum()
| Описание |
Вычисляет сумму всех непустых значений в группе. |
| Использование |
|
В случае булевых значений вычисляет количество значений True.
Посмотреть пример
CREATE TABLE numbers(
number BIGINT,
boolean BOOL);
INSERT INTO numbers VALUES
(1, True),
(2, False),
(3, False),
(NULL, NULL);
SELECT
sum(number) AS sum_number,
sum(boolean) AS sum_boolean
FROM numbers;
+------------+-------------+
| sum_number | sum_boolean |
+------------+-------------+
| 6 | 1 |
+------------+-------------+
var_pop()
| Описание |
Вычисляет дисперсию генеральной совокупности, не включающую коррекцию смещения. |
| Использование |
|
| Формула |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(4),
(NULL);
SELECT
var_pop(number),
var_samp(number)
FROM numbers;
+---------+--------------------+
| var_pop | var_samp |
+---------+--------------------+
| 1.25 | 1.6666666666666667 |
+---------+--------------------+
var_samp()
| Описание |
Вычисляет выборочную дисперсию, включающую поправку Бесселя на смещение. |
| Использование |
|
| Формула |
|
| Псевдонимы |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT);
INSERT INTO numbers VALUES
(1),
(2),
(3),
(4),
(NULL);
SELECT
var_pop(number),
var_samp(number)
FROM numbers;
+---------+--------------------+
| var_pop | var_samp |
+---------+--------------------+
| 1.25 | 1.6666666666666667 |
+---------+--------------------+
weighted_avg()
| Описание |
Вычисляет среднее взвешенное всех непустых значений в группе. |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
CREATE TABLE numbers(number BIGINT, weight BIGINT);
INSERT INTO numbers VALUES
(1, 1),
(2, 2),
(3, 3),
(NULL, NULL);
SELECT
avg(number),
weighted_avg(number, weight)
FROM numbers;
+-----+--------------------+
| avg | weighted_avg |
+-----+--------------------+
| 2 | 2.3333333333333335 |
+-----+--------------------+