Próbuję uruchomić kwerendę agregacji, która jest w przybliżeniu równa:Django wyrażenie kwerendy dla obliczonych pól, które wymagają warunków i odlewania
select
sum(impressions) as impressions,
sum(clicks) as clicks,
sum(clicks)/sum(impressions) as ctr
from stats
group by product
order by ctr;
Baza danych PostgreSQL jest stosowany.
że wykonane wyrażenie zapytania (Django 1,9):
Stats.objects.values('product').annotate(
impressions = models.Sum('impressions'),
clicks = models.Sum('clicks'),
ctr = models.ExpressionWrapper(
models.F('clicks')/models.F('impressions')), output_field = models.FloatField()
)
).order_by('ctr')
są 2 problemy z nim:
ctr
wynosi 0,0 ponieważ dzieli całkowite na poziomie bazy- generuje
division by zero
jeśli wyświetlenia to 0
Jakie jest właściwe rozwiązanie?
Działa, dzięki. Nazwy adnotacji mogą być takie same. – serg