Agrupar por y función de conteo en sqlalchemy


Respuestas:


165

La documentación sobre el conteo dice que para group_byconsultas es mejor usar func.count():

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

16
y aquí está la declaración completa para aquellos que usan la Table.querypropiedad en lugar de session.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul

2
@jkukul Esta debería ser una respuesta por sí sola: siempre me pregunté cómo sortear esta limitación al hacer subconsultas y quería usar group_by y count ...!
chris-sc

1
Las modificaciones a esta respuesta hacen que la primera oración carezca de sentido. ¿"Mejor" que qué ?
Mark Amery

33

Si está utilizando Table.querypropiedad:

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

Si está utilizando el session.query()método (como se indica en la respuesta de miniwark):

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

+ uno para con entidades
Espoir Murhabazi

27

También puede contar con varios grupos y su intersección:

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

La consulta anterior devolverá recuentos de todas las posibles combinaciones de valores de ambas columnas.


Gracias por la pregunta, mientras pensaba en ello encontré una respuesta a una pregunta mía relacionada. ;-)
fccoelho
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.