Django Queryset 基于唯一值注释

Django Queryset annotate based on unique value

我正在尝试编写一个查询集操作,尽可能高效地将第一个 table 转换为第二个 table 这是标准: 对于每个名称,有多少所独特的学校附属于它?此外,事先不知道确切的名称和学校。

Name School
John USC
John USC
John UCLA
Adam UCSD
Adam USC
Name num_unique_schools
John 2
Adam 2

1- 使用 Values 方法:

学生将按姓名分组,因此您只会获得每个唯一学生姓名的注释结果。

2- 使用带有 distinct 参数的 Count 方法:

这是根据分组的学生姓名计算“学校”,同时删除重复的学校。

代码:


from django.db import models
    
results = StudentSchool.objects.values('name').annotate(
    num_unique_schools = models.Count('school', distinct=True)
).order_by("name")

测试用例