python - tablas - Restar dos columnas anotadas
sumar columnas en r (2)
Necesito poder ordenar en el agregado de dos columnas anotadas
Así que me gustaría hacer algo como esto:
c = c.annotate(metric=Sum(''results__metric''))
c = c.annotate(metric_prior=Sum(''results__metric_prior''))
c = c.annotate(variance=F(''metric'')-F(''metric_prior'')) #doesn''t work, for demonstrative purposes only
y entonces:
c = c.order_by(''variance'')
¿Alguien sabe cómo lograr algo como lo anterior?
Actualmente,
c = c.annotate(variance=F(''metric'')-F(''metric_prior''))
Funciona como te gustaría que comenzara con Django 1.8 .
Además, también puedes ordenar por una expresión, lo que significa que puedes usar:
c = c.order_by(F(''metric'') - F(''metric_prior''))
o incluso simplemente:
c = c.order_by(Sum(''results__metric'') - Sum(''results__metric_prior''))
Ticket está allí por más de 4 años (para 2014), pero se puede lograr con una pequeña consulta .extra()
, como esta:
items = MyModel.objects.extra(
select = {''variance'': ''SUM(relatedModel__someField) - SUM(relatedModel__someField)''},
)
Sí, puede ser un poco impredecible con diferentes DBMS. Pero si limita la sintaxis de SQL adicional a muy común, debería funcionar más o menos en todas partes.