django 进行分组或区分以删除具有重复列的行

问题描述 投票:0回答:1

我有下面这样的桌子

表A

ID name score
 1 aaa   100
 2 bbb   200
 3 ccc   300
 4 bbb   100
 5 kkk   600
 6 ccc   300

现在名字

bbb
ccc
是重复的,我想删除然后像这样描绘,

ID name score
 1 aaa   100
 2 bbb   200
 3 ccc   300
 5 kkk   600

我发现django模型没有groupby,所以我想需要使用

annotate
distinct

所以我的想法是这样的,

MyModel.objects.annotate(Count('name'))

但是它并没有像我希望的那样工作。

有什么帮助或提示吗?

sql django model
1个回答
0
投票

在撰写本文时,对于除 Django 中的 之外的数据库来说,基于字段的不同结果并不是微不足道的。

但是我们可以通过

Exists
子查询来完成此操作:

from django.db.models import Exists, OuterRef

MyModel.objects.filter(
    ~Exists(
        MyModel.objects.filter(pk__lt=OuterRef('pk'), name=OuterRef('name'))
    )
)

因此,我们只在结果中生成一个

MyModel
对象,不存在其他具有相同名称和较小主键的
MyModel
对象。

© www.soinside.com 2019 - 2024. All rights reserved.