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

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

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


Obrigado pela pergunta, enquanto pensava sobre ela encontrei uma resposta para uma pergunta relacionada minha. ;-)
fccoelho
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.