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

Функция func.count

Функция func.count создает SQL-выражение для подсчета количества строк. Она относится к семейству агрегатных функций и обычно применяется вместе с методами select и group_by. Первым параметром передается выражение столбца или символ * для подсчета всех строк.

Синтаксис

func.count(expression)

Пример

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

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy import insert, select, func engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(insert(articles), [ {'title': 'article 1', 'text': 'text 1', 'status': 'published', 'num': 10}, {'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 20}, {'title': 'article 3', 'text': 'text 3', 'status': 'published', 'num': 30}, ]) conn.commit() res = conn.execute(select(func.count()).select_from(articles)).scalar() print(res)

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

3

Пример

Давайте подсчитаем количество статей по каждому статусу с помощью группировки:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy import insert, select, func engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(insert(articles), [ {'title': 'article 1', 'text': 'text 1', 'status': 'published', 'num': 10}, {'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 20}, {'title': 'article 3', 'text': 'text 3', 'status': 'published', 'num': 30}, ]) conn.commit() stmt = select(articles.c.status, func.count()).group_by(articles.c.status) res = conn.execute(stmt).all() print(res)

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

[('draft', 1), ('published', 2)]

Пример

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

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy import insert, select, func engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(insert(articles), [ {'title': 'article 1', 'text': 'text 1', 'status': 'published', 'num': 10}, {'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 20}, {'title': 'article 3', 'text': 'text 3', 'status': 'published', 'num': 30}, ]) conn.commit() res = conn.execute(select(func.count(articles.c.title))).scalar() print(res)

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

3

Пример

Давайте посмотрим, какой SQL-запрос генерирует функция func.count:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy import select, func engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer), ) stmt = select(func.count()).select_from(articles) print(stmt)

Итоговый SQL запрос:

SELECT count(*) AS count_1 FROM articles

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

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