Функция func.min
Функция func.min создает агрегатную SQL-функцию
MIN, которая возвращает наименьшее значение
в указанной колонке. Первым параметром функция
принимает колонку или выражение, по которому
нужно найти минимум. Обычно применяется в
конструкции select вместе с группировкой
или без нее.
Синтаксис
func.min(column)
Пример
Давайте найдем минимальное значение колонки
num в таблице articles:
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.begin() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'text': 'text 1', 'status': 'published', 'num': 30},
{'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 10},
{'title': 'article 3', 'text': 'text 3', 'status': 'published', 'num': 20},
])
with engine.connect() as conn:
query = select(func.min(articles.c.num))
res = conn.execute(query).scalar()
print(res)
Результат выполнения кода:
10
Пример
Давайте найдем минимальное значение колонки
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('text', String),
Column('status', String),
Column('num', Integer),
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'text': 'text 1', 'status': 'published', 'num': 30},
{'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 10},
{'title': 'article 3', 'text': 'text 3', 'status': 'published', 'num': 20},
])
with engine.connect() as conn:
query = select(func.min(articles.c.num).label('min_num'))
res = conn.execute(query).fetchone()
print(res)
Результат выполнения кода:
(10,)
Пример
Давайте найдем минимальное значение колонки
num для каждой группы по колонке
status с помощью group_by:
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.begin() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'text': 'text 1', 'status': 'published', 'num': 30},
{'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 10},
{'title': 'article 3', 'text': 'text 3', 'status': 'published', 'num': 20},
{'title': 'article 4', 'text': 'text 4', 'status': 'draft', 'num': 40},
])
with engine.connect() as conn:
query = (
select(articles.c.status, func.min(articles.c.num))
.group_by(articles.c.status)
)
res = conn.execute(query).fetchall()
print(res)
Результат выполнения кода:
[('draft', 10), ('published', 20)]
Пример
Давайте посмотрим, какой SQL-запрос
генерирует функция func.min:
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),
)
query = select(func.min(articles.c.num))
print(query)
Итоговый SQL запрос:
SELECT min(articles.num) AS min_1
FROM articles
Смотрите также
-
функцию
func.max,
которая возвращает максимальное значение -
функцию
func.sum,
которая возвращает сумму значений -
функцию
func.avg,
которая возвращает среднее значение -
функцию
func.count,
которая возвращает количество строк