Вложенный подзапрос в django ORM
Мне нужно преобразовать этот запрос в django, но я не могу понять как.
SELECT SUM(income)
FROM (
SELECT COUNT(keyword)*
CASE
WHEN country='ca' THEN 390
WHEN country='fi' THEN 290
WHEN country='it' THEN 280
WHEN country='nl' THEN 260
ELSE 250
END AS income
FROM analytics_conversions
WHERE keyword = 'online'
AND click_time BETWEEN '2022-06-01' AND '2022-06-30'
GROUP BY country) as _
Сейчас у меня есть этот код, но он возвращает несколько строк. Эти строки должны суммироваться и возвращать только одну строку для использования в подзапросе.
keywords_conversions_params = {
'keyword': OuterRef('keyword'),
'keyword_type': OuterRef('keyword_type')
}
keywords_conversions_value = Conversions.objects.filter(
**keywords_conversions_params).order_by().values('keyword').annotate(
value=Count('pk') * Case(
When(country='ca', then=350),
When(country='fi', then=290),
When(country='it', then=280),
When(country='nl', then=260),
default=250
)).values('value')
Мне удалось решить эту проблему, удалив группировку и просто суммируя значения с условием. Вот исправленный код.
keywords_conversions_params = {
'keyword': OuterRef('keyword'),
'keyword_type': OuterRef('keyword_type')
}
keywords_conversions_value = Conversions.objects.filter(
**keywords_conversions_params).values('keyword').annotate(
value=Sum(Case(
When(country='ca', then=350),
When(country='fi', then=290),
When(country='it', then=280),
When(country='nl', then=260),
default=250
))).values('value')