如何在Dajngo-orm中使用group_by时使用order_by,并取出所有字段



我使用Django-orm,postgresql,是否可以通过group_by和order_by进行查询?

这个表


| id | b_id | others |
| 1 | 2 | hh |
| 2 | 2 | hhh |
| 3 | 6 | h |
| 4 | 7 | hi |
| 5 | 7 | i |

我希望查询结果是这样的

| id | b_id | others |
| 1 | 2 | hh |
| 3 | 6 | h |
| 4 | 7 | hi |
or
| id | b_id | others |
| 4 | 7 | hi |
| 3 | 6 | h |
| 1 | 2 | hh |

我试着

Table.objects.annotate(count=Count('b_id')).values('b_id', 'id', 'others')
Table.objects.values('b_id', 'id', 'others').annotate(count=Count('b_id'))
Table.objects.extra(order_by=['id']).values('b_id','id', 'others')

按以下方式尝试窗口函数和子查询:

from django.db.models import Window, F, Subquery, Count
from django.db.models.functions import FirstValue
queryset = A.objects.annotate(count=Count('b_id')).filter(pk__in=Subquery(
A.objects.annotate(
first_id=Window(expression=FirstValue('id'), partition_by=[F('b_id')]), order_by=F('id'))
.values('first_id')))

你可以试试:

from django.db.models import Count
result = Table.objects
.values('b_id')
.annotate(count=Count('b_id'))

相关内容

  • 没有找到相关文章

最新更新