Grupo por função de contagem em sqlalchemy

Respostas:

165

A documentação sobre contagem diz que para group_byconsultas é melhor usar func.count():

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()
miniwark
fonte
16
e aqui está a declaração completa para aqueles que usam a Table.querypropriedade em vez de session.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul
2
@jkukul Esta deve ser uma resposta por si só - Eu sempre me perguntei como contornar essa limitação ao fazer subconsultas e queria usar group_by e contar ..!
chris-sc
1
As edições a esta resposta tornam a primeira frase sem sentido. "Melhor" do que o quê ?
Mark Amery
33

Se você estiver usando uma Table.querypropriedade:

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

Se você estiver usando o session.query()método (conforme declarado na resposta do miniwark):

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul
fonte
+ um para com entidades
Espoir Murhabazi
27

Você também pode contar com vários grupos e suas interseções:

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

A consulta acima retornará contagens para todas as combinações possíveis de valores de ambas as colunas.

fccoelho
fonte
Obrigado pela pergunta, enquanto pensava sobre ela encontrei uma resposta para uma pergunta relacionada minha. ;-)
fccoelho