Агрегатные функции
Функция | Описание |
|---|---|
Возвращает среднее арифметическое всех элементов группы. | |
Возвращает коэффициент корреляции Пирсона между двумя столбцами. | |
Возвращает количество элементов в группе. | |
Возвращает ковариацию между двумя столбцами. | |
Возвращает первый элемент группы. | |
Возвращает последний элемент группы. | |
Возвращает наибольший (максимальный) из всех элементов группы. | |
Возвращает медианный элемент группы. | |
Возвращает наименьший (минимальный) из всех элементов группы. | |
Возвращает элемент непрерывного квантиля из группы (интерполированное значение между двумя ближайшими значениями). | |
Разбивает интервал [0, 1] на подинтервалы равной длины, каждый из которых соответствует значению, и возвращает значение, связанное с подинтервалом, в который попадает значение квантиля. | |
Возвращает стандартное отклонение всех элементов группы. | |
Объединяет входные строковые значения в одну строку, разделяя их разделителем. | |
Возвращает сумму всех элементов группы. | |
Возвращает сумму всех элементов группы; если нет ненулевых значений, возвращает ноль, а не null. | |
Возвращает дисперсию всех элементов группы. |
Фильтрация агрегатных функций
Вызов любой агрегатной функции можно дополнить предложением FILTER (WHERE …), которое ограничивает его строками, для которых предикат имеет значение true. Это предложение относится к отдельному вызову агрегатной функции и не зависит от предложения WHERE запроса, поэтому разные агрегатные функции в одном и том же SELECT могут обрабатывать разные наборы строк.
Примечание
FILTER нельзя использовать вместе с OVER в одном вызове агрегатной функции.
Пример:
df = pl.DataFrame(
{
"category": ["A", "B", "A", "B", "A", "B"],
"value": [10, 20, 30, 40, 50, 60],
}
)
df.sql("""
SELECT
category,
SUM(value) AS total,
SUM(value) FILTER (WHERE value > 25) AS total_high,
SUM(value) FILTER (WHERE value <= 25) AS total_low,
COUNT(*) FILTER (WHERE value >= 40) AS n_top
FROM self
GROUP BY category
ORDER BY category
""")
# shape: (2, 5)
# ┌──────────┬───────┬────────────┬───────────┬───────┐
# │ category ┆ total ┆ total_high ┆ total_low ┆ n_top │
# │ --- ┆ --- ┆ --- ┆ --- ┆ --- │
# │ str ┆ i64 ┆ i64 ┆ i64 ┆ u32 │
# ╞══════════╪═══════╪════════════╪═══════════╪═══════╡
# │ A ┆ 90 ┆ 80 ┆ 10 ┆ 1 │
# │ B ┆ 120 ┆ 100 ┆ 20 ┆ 2 │
# └──────────┴───────┴────────────┴───────────┴───────┘
AVG
Возвращает среднее арифметическое всех элементов группы.
Пример:
df = pl.DataFrame({"bar": [20, 10, 30, 40]})
df.sql("""
SELECT AVG(bar) AS bar_avg FROM self
""")
# shape: (1, 1)
# ┌─────────┐
# │ bar_avg │
# │ --- │
# │ f64 │
# ╞═════════╡
# │ 25.0 │
# └─────────┘
CORR
Возвращает коэффициент корреляции Пирсона между двумя столбцами.
Пример:
df = pl.DataFrame({"foo": [1, 2, 3, 4, 5], "bar": [2, 4, 7, 5, 9]})
df.sql("""
SELECT CORR(foo, bar) AS corr FROM self
""")
# shape: (1, 1)
# ┌──────────┐
# │ corr │
# │ --- │
# │ f64 │
# ╞══════════╡
# │ 0.877809 │
# └──────────┘
COUNT
Возвращает количество элементов в группе.
Пример:
df = pl.DataFrame(
{
"foo": ["b", "a", "b", "c"],
"bar": [20, 10, 30, 40]
}
)
df.sql("""
SELECT
COUNT(bar) AS n_bar,
COUNT(DISTINCT foo) AS n_foo_unique
FROM self
""")
# shape: (1, 2)
# ┌───────┬──────────────┐
# │ n_bar ┆ n_foo_unique │
# │ --- ┆ --- │
# │ u32 ┆ u32 │
# ╞═══════╪══════════════╡
# │ 4 ┆ 3 │
# └───────┴──────────────┘
COVAR
Возвращает ковариацию между двумя столбцами.
Псевдонимы
COVAR_SAMP
Пример:
df = pl.DataFrame({"foo": [1, 2, 3, 4, 5], "bar": [2, 4, 7, 5, 9]})
df.sql("""
SELECT COVAR(foo, bar) AS covar FROM self
""")
# shape: (1, 1)
# ┌───────┐
# │ covar │
# │ --- │
# │ f64 │
# ╞═══════╡
# │ 3.75 │
# └───────┘
FIRST
Возвращает первый элемент группы.
Пример:
df = pl.DataFrame({"foo": ["b", "a", "b", "c"]})
df.sql("""
SELECT FIRST(foo) AS ff FROM self
""")
# shape: (1, 1)
# ┌─────┐
# │ ff │
# │ --- │
# │ str │
# ╞═════╡
# │ b │
# └─────┘
LAST
Возвращает последний элемент группы.
Пример:
df = pl.DataFrame({"foo": ["b", "a", "b", "c"]})
df.sql("""
SELECT LAST(foo) AS lf FROM self
""")
# shape: (1, 1)
# ┌─────┐
# │ lf │
# │ --- │
# │ str │
# ╞═════╡
# │ c │
# └─────┘
MAX
Возвращает наибольший (максимальный) из всех элементов группы.
Пример:
df = pl.DataFrame({"bar": [20, 10, 30, 40]})
df.sql("""
SELECT MAX(bar) AS bar_max FROM self
""")
# shape: (1, 1)
# ┌─────────┐
# │ bar_max │
# │ --- │
# │ i64 │
# ╞═════════╡
# │ 40 │
# └─────────┘
MEDIAN
Возвращает медианный элемент группы.
Пример:
df = pl.DataFrame({"bar": [20, 10, 30, 40]})
df.sql("""
SELECT MEDIAN(bar) AS bar_median FROM self
""")
# shape: (1, 1)
# ┌────────────┐
# │ bar_median │
# │ --- │
# │ f64 │
# ╞════════════╡
# │ 25.0 │
# └────────────┘
MIN
Возвращает наименьший (минимальный) из всех элементов группы.
Пример:
df = pl.DataFrame({"bar": [20, 10, 30, 40]})
df.sql("""
SELECT MIN(bar) AS bar_min FROM self
""")
# shape: (1, 1)
# ┌─────────┐
# │ bar_min │
# │ --- │
# │ i64 │
# ╞═════════╡
# │ 10 │
# └─────────┘
QUANTILE_CONT
Возвращает элемент непрерывного квантиля из группы (интерполированное значение между двумя ближайшими значениями).
Пример:
df = pl.DataFrame({"foo": [5, 20, 10, 30, 70, 40, 10, 90]})
df.sql("""
SELECT
QUANTILE_CONT(foo, 0.25) AS foo_q25,
QUANTILE_CONT(foo, 0.50) AS foo_q50,
QUANTILE_CONT(foo, 0.75) AS foo_q75,
FROM self
""")
# shape: (1, 3)
# ┌─────────┬─────────┬─────────┐
# │ foo_q25 ┆ foo_q50 ┆ foo_q75 │
# │ --- ┆ --- ┆ --- │
# │ f64 ┆ f64 ┆ f64 │
# ╞═════════╪═════════╪═════════╡
# │ 10.0 ┆ 25.0 ┆ 47.5 │
# └─────────┴─────────┴─────────┘
QUANTILE_DISC
Разбивает интервал [0, 1] на подинтервалы равной длины, каждый из которых соответствует значению, и возвращает значение, связанное с подинтервалом, в который попадает значение квантиля.
Пример:
df = pl.DataFrame({"foo": [5, 20, 10, 30, 70, 40, 10, 90]})
df.sql("""
SELECT
QUANTILE_DISC(foo, 0.25) AS foo_q25,
QUANTILE_DISC(foo, 0.50) AS foo_q50,
QUANTILE_DISC(foo, 0.75) AS foo_q75,
FROM self
""")
# shape: (1, 3)
# ┌─────────┬─────────┬─────────┐
# │ foo_q25 ┆ foo_q50 ┆ foo_q75 │
# │ --- ┆ --- ┆ --- │
# │ f64 ┆ f64 ┆ f64 │
# ╞═════════╪═════════╪═════════╡
# │ 10.0 ┆ 20.0 ┆ 40.0 │
# └─────────┴─────────┴─────────┘
STDDEV
Возвращает выборочное стандартное отклонение всех элементов группы.
Псевдонимы
STDEV, STDEV_SAMP, STDDEV_SAMP
Пример:
df = pl.DataFrame(
{
"foo": [10, 20, 8],
"bar": [10, 7, 18],
}
)
df.sql("""
SELECT STDDEV(foo) AS foo_std, STDDEV(bar) AS bar_std FROM self
""")
# shape: (1, 2)
# ┌──────────┬──────────┐
# │ foo_std ┆ bar_std │
# │ --- ┆ --- │
# │ f64 ┆ f64 │
# ╞══════════╪══════════╡
# │ 6.429101 ┆ 5.686241 │
# └──────────┴──────────┘
STRING_AGG
Объединяет входные строковые значения в одну строку, разделяя их указанным разделителем. Поддерживает DISTINCT и предложения ORDER BY и LIMIT внутри аргумента, которые позволяют задать, какие значения объединяются и в каком порядке; разделитель необязателен, по умолчанию используется ",".
Псевдонимы
GROUP_CONCAT, LISTAGG
Пример:
df = pl.DataFrame(
{
"category": ["A", "B", "A", "B", "A", "B"],
"label": ["x1", "y1", "x2", "y2", "x3", "y3"],
"value": [10, 20, 30, 40, 50, 60],
}
)
df.sql("""
SELECT
category,
STRING_AGG(label LIMIT 2) AS two_labels,
STRING_AGG(label, ':' ORDER BY value DESC) AS labels_desc,
STRING_AGG(label, ',' ORDER BY value ASC) FILTER(WHERE label !~ '1$') AS labels_omit_1,
FROM self
GROUP BY category
ORDER BY category
""")
# shape: (2, 4)
# ┌──────────┬────────────┬─────────────┬───────────────┐
# │ category ┆ two_labels ┆ labels_desc ┆ labels_omit_1 │
# │ --- ┆ --- ┆ --- ┆ --- │
# │ str ┆ str ┆ str ┆ str │
# ╞══════════╪════════════╪═════════════╪═══════════════╡
# │ A ┆ x1,x2 ┆ x3:x2:x1 ┆ x2,x3 │
# │ B ┆ y1,y2 ┆ y3:y2:y1 ┆ y2,y3 │
# └──────────┴────────────┴─────────────┴───────────────┘
SUM
Возвращает сумму всех элементов группы.
Пример:
df = pl.DataFrame(
{
"foo": [1, 2, 3],
"bar": [6, 7, 8],
"ham": ["a", "b", "c"],
}
)
df.sql("""
SELECT SUM(foo) AS foo_sum, SUM(bar) AS bar_sum FROM self
""")
# shape: (1, 2)
# ┌─────────┬─────────┐
# │ foo_sum ┆ bar_sum │
# │ --- ┆ --- │
# │ i64 ┆ i64 │
# ╞═════════╪═════════╡
# │ 6 ┆ 21 │
# └─────────┴─────────┘
TOTAL
Возвращает сумму всех элементов группы. В отличие от SUM (которая, согласно стандарту SQL, возвращает null для входных данных, состоящих только из null), TOTAL возвращает ноль. Тип данных результата соответствует типу данных суммируемого столбца.
Пример:
df = pl.DataFrame(
{"foo": [1, 2, 3], "bar": [None, None, None]},
schema={"foo": pl.Int64, "bar": pl.Int64},
)
df.sql("""
SELECT
SUM(bar) AS bar_sum,
TOTAL(foo) AS foo_total,
TOTAL(bar) AS bar_total
FROM self
""")
# shape: (1, 3)
# ┌─────────┬───────────┬───────────┐
# │ bar_sum ┆ foo_total ┆ bar_total │
# │ --- ┆ --- ┆ --- │
# │ i64 ┆ i64 ┆ i64 │
# ╞═════════╪═══════════╪═══════════╡
# │ null ┆ 6 ┆ 0 │
# └─────────┴───────────┴───────────┘
VARIANCE
Возвращает дисперсию всех элементов группы.
Псевдонимы
VAR, VAR_SAMP
Пример:
df = pl.DataFrame(
{
"foo": [10, 20, 8],
"bar": [10, 7, 18],
}
)
df.sql("""
SELECT VARIANCE(foo) AS foo_var, VARIANCE(bar) AS bar_var FROM self
""")
# shape: (1, 2)
# ┌───────────┬───────────┐
# │ foo_var ┆ bar_var │
# │ --- ┆ --- │
# │ f64 ┆ f64 │
# ╞═══════════╪═══════════╡
# │ 41.333333 ┆ 32.333333 │
# └───────────┴───────────┘
© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/sql/functions/aggregate.html