Я пытаюсь запустить запрос агрегации, который примерно равен:
select
sum(impressions) as impressions,
sum(clicks) as clicks,
sum(clicks)/sum(impressions) as ctr
from stats
group by product
order by ctr;
Используемая база данных - PostgreSQL.
Я сделал это выражение запроса (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')
Есть две проблемы:
-
ctr
равен 0.0, поскольку он делит целые числа на уровне базы данных - он бросает
division by zero
, если показы 0
Какое правильное решение?