Fonction Group by & Count dans sqlalchemy


Réponses:


165

La documentation sur le comptage indique que pour les group_byrequêtes, il est préférable d'utiliser func.count():

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

16
et voici la déclaration complète pour ceux qui utilisent la Table.querypropriété au lieu de session.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul

2
@jkukul Cela devrait être une réponse en soi - je me suis toujours demandé comment contourner cette limitation lorsque je faisais des sous-requêtes et je voulais utiliser group_by et count ..!
chris-sc

1
Les modifications apportées à cette réponse rendent la première phrase dénuée de sens. "Mieux" que quoi ?
Mark Amery

33

Si vous utilisez la Table.querypropriété:

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

Si vous utilisez la session.query()méthode (comme indiqué dans la réponse de miniwark):

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

+ un pour avec les entités
Espoir Murhabazi

28

Vous pouvez également compter sur plusieurs groupes et leur intersection:

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

La requête ci-dessus renverra des décomptes pour toutes les combinaisons possibles de valeurs des deux colonnes.


Merci pour la question, en y réfléchissant, j'ai trouvé une réponse à une de mes questions connexes. ;-)
fccoelho
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.