如何在Django中编写sql COALESCE
我是Django的新手。如何将联合sql查询集写入django orm如何在Django中编写sql COALESCE,django,django-queryset,Django,Django Queryset,我是Django的新手。如何将联合sql查询集写入django orm query = 'SELECT COALESCE(max(CAST(order_no as UNSIGNED)), 0) as o,id from nanossc_Sales_master' models.py class Sales_master(models.Model): slno = models.IntegerField(blank=True, null=True) order_no = mode
query = 'SELECT COALESCE(max(CAST(order_no as UNSIGNED)), 0) as o,id from nanossc_Sales_master'
models.py
class Sales_master(models.Model):
slno = models.IntegerField(blank=True, null=True)
order_no = models.CharField(max_length=50, blank=True, null=True)
type = models.CharField(max_length=50, blank=True, null=True)
customer_id = models.CharField(max_length=50, blank=True, null=True)
customer_name = models.CharField(max_length=50, blank=True, null=True)
brand_name = models.CharField(max_length=50, blank=True, null=True)
name = models.CharField(max_length=50, blank=True, null=True)
您可以在此处使用和:
从django.db.models导入最大值,正输入字段,值
从django.db.models.functions导入强制转换、合并
Sales_master.objects.aggregate(
o=合并(最大值(转换('order_no',output_field=PositiveIntergerField()),值(0))
)
这将生成一个字典,其中键'o'
映射到此聚合的结果。您可以在此处使用and:
从django.db.models导入最大值,正输入字段,值
从django.db.models.functions导入强制转换、合并
Sales_master.objects.aggregate(
o=合并(最大值(转换('order_no',output_field=PositiveIntergerField()),值(0))
)
这将生成一个字典,其中键
'o'
映射到此聚合的结果。您可以共享您的模型吗?上面的查询看起来不是有效的,因为MAX(..)
通常是在一组对象上定义的,而不是单个标量。@WillemVanOnsem实际上我正在将PHP查询转换为django。这是php queryset$result=mysql\u查询(“选择COALESCE(max(CAST(订单号为UNSIGNED)),0)作为sales\u master的o”)
@Kumor:than它是一个聚合,但是你不能使用id
那么。@WillemVanOnsem没有id它的显示错误,这就是为什么我在那里使用id,但是在你的PHP程序中,它没有。你能分享你的模型吗?上面的查询看起来不是有效的,因为MAX(..)
通常是在一组对象上定义的,而不是单个标量。@WillemVanOnsem实际上我正在将PHP查询转换为django。这是php queryset$result=mysql\u查询(“选择COALESCE(max(CAST(订单号为UNSIGNED)),0)作为sales\u master的o”)
@Kumor:than它是一个聚合,但是您不能使用id
then.@WillemVanOnsem如果没有id则显示错误,这就是为什么我在那里使用id,但在您的PHP程序中,它没有?
from django.db.models import Max, PositiveIntergerField, Value
from django.db.models.functions import Cast, Coalesce
Sales_master.objects.aggregate(
o=Coalesce(Max(Cast('order_no', output_field=PositiveIntergerField())), Value(0))
)