我有下面这样的桌子
表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'))
但是它并没有像我希望的那样工作。
有什么帮助或提示吗?
在撰写本文时,对于除 Django 中的 postgresql 之外的数据库来说,基于字段的不同结果并不是微不足道的。
但是我们可以通过
Exists
子查询来完成此操作:
from django.db.models import Exists, OuterRef
MyModel.objects.filter(
~Exists(
MyModel.objects.filter(pk__lt=OuterRef('pk'), name=OuterRef('name'))
)
)
因此,我们只在结果中生成一个
MyModel
对象,不存在其他具有相同名称和较小主键的 MyModel
对象。