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

Функция func.aggregate_strings

Функция func.aggregate_strings создает SQL-выражение для агрегации строковых значений. Она принимает два параметра: столбец или выражение, которое нужно объединить, и строку-разделитель, которая будет вставлена между значениями. Функция работает как агрегатная и часто используется совместно с группировкой данных.

Синтаксис

func.aggregate_strings(column, separator)

Пример

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

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('text', String), Column('status', String), Column('num', Integer) ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(articles.insert(), [ {'title': 'article', 'text': 'text 1', 'status': 'published', 'num': 1}, {'title': 'user', 'text': 'text 2', 'status': 'draft', 'num': 2}, {'title': 'sqlite', 'text': 'text 3', 'status': 'published', 'num': 3} ]) conn.commit() res = conn.execute( select(func.aggregate_strings(articles.c.title, ', ')) ).scalar() print(res)

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

"article, user, sqlite"

Пример

Давайте используем функцию func.aggregate_strings с группировкой по статусу статьи:

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('text', String), Column('status', String), Column('num', Integer) ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(articles.insert(), [ {'title': 'article', 'text': 'text 1', 'status': 'published', 'num': 1}, {'title': 'user', 'text': 'text 2', 'status': 'draft', 'num': 2}, {'title': 'sqlite', 'text': 'text 3', 'status': 'published', 'num': 3} ]) conn.commit() res = conn.execute( select( articles.c.status, func.aggregate_strings(articles.c.title, '; ') ).group_by(articles.c.status) ).all() print(res)

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

[('draft', 'user'), ('published', 'article; sqlite')]

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

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