2011-08-20 13 views
7

tengo esta consulta:sqlalchemy: obtener los valores máx/mín/promedio de una tabla

mps = (
      session.query(mps) .filter_by(idc = int(c.idc)) 
           .filter_by(idmp = int(m.idmp)) 
           .group_by(func.day(mps.tschecked)) 
     ).all() 

Mi problema es que no sé cómo extraer (con sqlalchemy) del max/min/avg valor de una tabla ...

me parece: Database-Independent MAX() Function in SQLAlchemy

Pero no sé dónde utilizar esta func.max/min/avg ...

puede alguien decirme cómo ¿hacer esto? ¿Puedes darme un ejemplo?

+1

¿No cambiarías lo anterior para que sea 'session.query (func.avg (mps.some_column)). Filter ...'? No lo he intentado, ni he usado sqlalchemy por un tiempo, pero parece ser la conclusión obvia del enlace que me diste. no funciona? –

+0

Funciona, pero de lo que necesito llamar valores como mps [0], y no mps.tschecked ... ¿se puede hacer de otra manera? – Wolfy

+1

'mps' es al menos dos cosas diferentes en tu código. ¿por qué estás haciendo eso? los resultados se describen en la documentación http://www.sqlalchemy.org/docs/core/connections.html#sqlalchemy.engine.base.ResultProxy - puede usar el índice, el nombre o un objeto de columna –

Respuesta

18

Las siguientes funciones están disponibles con from sqlalchemy import func:

  • func.min
  • func.max
  • func.avg

La documentación está disponible here.

Puede usarlos, es decir, en el método query().

Ejemplo:

session.query(self.stats.c.ID, func.max(self.stats.c.STA_DATE)) 

(al igual que el uso de funciones agragate en SQL normal)

+2

Puede encontrar la [documentación de 'func'] (http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=func#sqlalchemy.sql.expression.func) aquí, pero puede simplemente importelo con 'from sqlalchemy import func'. –

-6

o simplemente utilizar un order_by() y seleccionar el primer o último elemento. . .

+5

Bastante performace-mala idea ... – tomis

Cuestiones relacionadas