Здесь я пытаюсь преобразовать Django raw sql query в Django queryset.
Но проблема в том, как реализовать отдельный в двух столбцах?
SQL query:
count(distinct ra, category) as order_type
Django queryset - order_type = Count ('ra', 'category', Different = True) - это вызывает ошибку.
queryset = Model.objects.raw("select id,category,count(category)
as total_orders, count(distinct ra, category) as order_type,
SUM(CASE WHEN service_status = 'success' THEN 1 ELSE 0 END) as total_success_order,
SUM(CASE WHEN service_status = 'failed' THEN 1 ELSE 0 END) as total_failed_order
from table
group by ra;")
queryset = Model.objects.values('ra').annotate(category=F('category'),\
order_type=Count('ra', 'category', distinct=True),total_orders=Count('category'),\
total_success_order=Count('service_status', filter=Q(service_status='success')),\
total_failed_order=Count('service_status', filter=Q(service_status='failed'))).order_by()
Что следует правильный синтаксис?
Data-
category ra service_status
cat1 11 success
cat1 12 success
cat2 11 success
cat2 11 success
cat1 15 success
cat3 5 failed
ra 11 должен быть возвращен как order_type = 2
(то есть, если один и тот же ra относится к двум разным категориям)
O / p-
Category order type total order successful failed
cat1 1 10 5 5
cat2 2 14 10 4
cat3 1 9 9 0