这里我尝试将 Django rawsql 查询转换为 Django 查询集。
但问题是——如何在两列中实现不同?
SQL查询:
count(distinct ra, category) as order_type
Run Code Online (Sandbox Code Playgroud)
Django 查询集 - order_type=Count('ra', 'category',distinct=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()
Run Code Online (Sandbox Code Playgroud)
正确的语法应该是什么?
数据-
category ra service_status
cat1 11 success
cat1 12 …
Run Code Online (Sandbox Code Playgroud)