Функция func.avg
Функция func.avg создает SQL-выражение
для вычисления среднего арифметического значения
по указанному столбцу. Функция принимает
столбец или выражение, по которому нужно
рассчитать среднее. Возвращает объект
SQL-выражения, который можно использовать
в запросах выборки. Обычно применяется
совместно с функциями группировки и
агрегации.
Синтаксис
func.avg(column)
Пример
Давайте создадим таблицу с товарами и вычислим среднюю цену всех товаров:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, select, func
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'num': 10},
{'title': 'article 2', 'num': 20},
{'title': 'article 3', 'num': 30}
])
conn.commit()
stmt = select(func.avg(articles.c.num))
res = conn.execute(stmt).scalar()
print(res)
Результат выполнения кода:
20.0
Пример
Давайте вычислим среднее значение с использованием группировки по статусу:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, select, func
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'status': 'active', 'num': 10},
{'title': 'article 2', 'status': 'active', 'num': 20},
{'title': 'article 3', 'status': 'archive', 'num': 30}
])
conn.commit()
stmt = select(articles.c.status, func.avg(articles.c.num)).group_by(articles.c.status)
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('active', 15.0), ('archive', 30.0)]
Пример
Давайте используем псевдоним для результата вычисления среднего значения:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, select, func
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'num': 5},
{'title': 'article 2', 'num': 15},
{'title': 'article 3', 'num': 25}
])
conn.commit()
stmt = select(func.avg(articles.c.num).label('avg_num'))
res = conn.execute(stmt).scalar()
print(res)
Результат выполнения кода:
15.0
Смотрите также
-
функцию
func,
которая создает вызов произвольной SQL-функции -
функцию
func.sum,
которая вычисляет сумму значений -
функцию
func.count,
которая подсчитывает количество строк -
функцию
label,
которая задает псевдоним для столбца