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()

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()

+ 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.


Dziękuję za pytanie, myśląc o nim znalazłem odpowiedź na swoje pokrewne pytanie. ;-)
fccoelho
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.