Функция группировки и подсчета в sqlalchemy


Ответы:


169

В документации по подсчету написано, что для group_byзапросов лучше использовать func.count():

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()

16
а вот полное заявление для тех, кто использует Table.queryсобственность вместо session.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Якуб Кукул,

2
@jkukul Это должен быть ответ сам по себе - мне всегда было интересно, как обойти это ограничение при выполнении подзапросов, и я хотел использовать group_by и count ..!
chris-sc

1
Изменения в этом ответе делают первое предложение бессмысленным. "Лучше" чем что ?
Марк Эмери

35

Если вы используете Table.queryнедвижимость:

from sqlalchemy import func
Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()

Если вы используете session.query()метод (как указано в ответе miniwark):

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()

+ один для с сущностями
Эспоар Мурхабази

28

Вы также можете рассчитывать на несколько групп и их пересечение:

self.session.query(func.count(Table.column1),Table.column1, Table.column2).group_by(Table.column1, Table.column2).all()

Приведенный выше запрос вернет количество всех возможных комбинаций значений из обоих столбцов.


Спасибо за вопрос. Размышляя над ним, я нашел ответ на свой вопрос. ;-)
fccoelho
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.