在 Django 中,在包含多列的表中,我想获取 symbolName
及其 count
TestModel.objects.values('symbolName').annotate(total=Count('symbolName')).order_by('-id')
我在同一个表中有其他列 id,col1,col2,,,,,,,,,
现在有什么方法可以获得其他列的第一条记录,因为我正在对它们进行排序 desc
order
annotate
中是否有名为 First('colname')
的函数
如果可能的话,将所有列都包含在一个镜头中,例如 First('*')
编辑
我可以使用
添加其他列annotate(col1=F('col1'))
但是如何添加所有列。任何捷径
annotate(F('*'))
答案 0 :(得分:0)
首先,您必须为此解决方案使用 postgres
数据库。
如果您使用的是 Django 版本 >=2.0,则可以使用 Window function
表达式。
from django.db.models.expressions import Window
TestModel.objects.annotate(total=Window(
expression=Count('*'),
partition_by=[F('symbolName')]).order_by('-id')
否则:
from django.db.models.expressions import RawSQL
TestModel.objects.annotate(total=RawSQL("Count(*) OVER(PARTITION BY symbolName)", [])).order_by('-id')
现在您可以获取第一行、最后一行或任何包含所有列和 total
列的行。