Django: GroupBy: 并显示其他列

时间:2021-04-20 02:02:53

标签: django

在 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('*'))

1 个答案:

答案 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 列的行。

相关问题