РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
453 of 711 menu

Функция func.sum

Функция func.sum относится к семейству агрегатных функций и вычисляет сумму значений указанной колонки. В качестве параметра функция принимает колонку или выражение, значения которого нужно сложить. Обычно применяется вместе с методами группировки group_by и фильтрации having.

Синтаксис

func.sum(column)

Пример

Давайте создадим таблицу статей и посчитаем сумму значений колонки num:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, 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': 'published', 'num': 10}, {'title': 'article 2', 'status': 'published', 'num': 20}, {'title': 'article 3', 'status': 'draft', 'num': 30} ]) conn.commit() stmt = select(func.sum(articles.c.num)) res = conn.execute(stmt).scalar() print(res)

Результат выполнения кода:

60

Пример

Давайте выведем сумму значений колонки num с псевдонимом через метод label:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, 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': 'published', 'num': 10}, {'title': 'article 2', 'status': 'published', 'num': 20}, {'title': 'article 3', 'status': 'draft', 'num': 30} ]) conn.commit() stmt = select(func.sum(articles.c.num).label('total')) res = conn.execute(stmt).first() print(res.total)

Результат выполнения кода:

60

Пример

Давайте посчитаем сумму значений колонки num для каждой группы по колонке status:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, 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': 'published', 'num': 10}, {'title': 'article 2', 'status': 'published', 'num': 20}, {'title': 'article 3', 'status': 'draft', 'num': 30} ]) conn.commit() stmt = select( articles.c.status, func.sum(articles.c.num).label('total') ).group_by(articles.c.status) res = conn.execute(stmt).all() for row in res: print(row.status, row.total)

Результат выполнения кода:

published 30 draft 30

Пример

Давайте отфильтруем группы с помощью метода having и оставим только те, у которых сумма больше 25:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, 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': 'published', 'num': 10}, {'title': 'article 2', 'status': 'published', 'num': 20}, {'title': 'article 3', 'status': 'draft', 'num': 30} ]) conn.commit() stmt = select( articles.c.status, func.sum(articles.c.num).label('total') ).group_by(articles.c.status).having(func.sum(articles.c.num) > 25) res = conn.execute(stmt).all() for row in res: print(row.status, row.total)

Результат выполнения кода:

published 30 draft 30

Смотрите также

  • функцию func,
    которая создает любую SQL-функцию
  • функцию func.count,
    которая считает количество строк
  • функцию func.avg,
    которая вычисляет среднее значение
  • функцию func.max,
    которая находит максимальное значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить