Group by & count-Funktion in sqlalchemy

Antworten:

164

Die Dokumentation zum Zählen besagt, dass es für group_byAbfragen besser ist, Folgendes zu verwenden func.count():

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()
Miniwark
quelle
16
und hier ist die vollständige Erklärung für diejenigen, die Table.queryEigentum anstelle von session.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul
2
@jkukul Dies sollte eine Antwort für sich sein - ich habe mich immer gefragt, wie ich diese Einschränkung umgehen kann, wenn ich Unterabfragen mache, und wollte group_by und count verwenden ..!
Chris-Sc
1
Die Änderungen an dieser Antwort machen den ersten Satz bedeutungslos. "Besser" als was ?
Mark Amery
33

Wenn Sie eine Table.queryEigenschaft verwenden:

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

Wenn Sie eine session.query()Methode verwenden (wie in der Antwort von miniwark angegeben):

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul
quelle
+ eins für mit Entitäten
Espoir Murhabazi
27

Sie können auch auf mehrere Gruppen und deren Schnittpunkte zählen:

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

Die obige Abfrage gibt die Anzahl aller möglichen Wertekombinationen aus beiden Spalten zurück.

fccoelho
quelle
Vielen Dank für die Frage, während ich darüber nachdachte, fand ich eine Antwort auf eine verwandte Frage von mir. ;-)
fccoelho