Funkcja Group by & count w sqlalchemy

Odpowiedzi:

166

Dokumentacja na liczeniu mówi, że dla group_byzapytań to lepiej jest użyć func.count():

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()
miniwark
źródło
16
a oto pełne oświadczenie dla osób korzystających z Table.querywłaściwości zamiast session.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul
2
@jkukul To powinna być odpowiedź sama w sobie - zawsze zastanawiałem się, jak obejść to ograniczenie podczas wykonywania podzapytań i chciałem użyć funkcji group_by i count ..!
chris-sc,
1
Zmiany w tej odpowiedzi sprawiają, że pierwsze zdanie jest trochę bez znaczenia. „Lepiej” niż co ?
Mark Amery,
33

Jeśli korzystasz z Table.querywłaściwości:

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

Jeśli używasz session.query()metody (jak podano w odpowiedzi miniwarka):

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul
źródło
+ jeden dla z podmiotami
Espoir Murhabazi
28

Możesz też liczyć na wiele grup i ich przecięcia:

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

Powyższe zapytanie zwróci liczby dla wszystkich możliwych kombinacji wartości z obu kolumn.

fccoelho
źródło
Dziękuję za pytanie, myśląc o nim znalazłem odpowiedź na swoje pokrewne pytanie. ;-)
fccoelho