Подсчет (отличный) с несколькими полями в django - PullRequest
1 голос
/ 03 мая 2020

Здесь я пытаюсь преобразовать 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
...