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

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

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


Vielen Dank für die Frage, während ich darüber nachdachte, fand ich eine Antwort auf eine verwandte Frage von mir. ;-)
fccoelho
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.