Raggruppa per e conta la funzione in sqlalchemy


Risposte:


165

La documentazione sul conteggio dice che per le group_byquery è meglio usare func.count():

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

16
ed ecco la dichiarazione completa per coloro che utilizzano la Table.queryproprietà invece di session.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul

2
@jkukul Questa dovrebbe essere una risposta da sola - mi sono sempre chiesto come aggirare questa limitazione quando si eseguono sottoquery e volevo usare group_by e contare ..!
chris-sc

1
Le modifiche a questa risposta rendono la prima frase priva di significato. "Meglio" di cosa ?
Mark Amery

33

Se stai usando la Table.queryproprietà:

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

Se stai usando il session.query()metodo (come indicato nella risposta di miniwark):

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

+ uno per con entità
Espoir Murhabazi,

27

Puoi anche contare su più gruppi e sulla loro intersezione:

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

La query precedente restituirà i conteggi per tutte le possibili combinazioni di valori di entrambe le colonne.


Grazie per la domanda, pensandoci ho trovato una risposta a una mia domanda correlata. ;-)
fccoelho
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.