Функція згрупувати за рахунком і рахувати в sqlalchemy


Відповіді:


165

Документація на підрахунку каже , що для 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 і рахувати ..!
chris-sc

1
Зміни в цій відповіді роблять перше речення безглуздим. "Краще", ніж що ?
Марк Амері

33

Якщо ви використовуєте 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()

+ один для осіб
Espoir Murhabazi

27

Ви також можете розраховувати на кілька груп та їх перетин:

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.