Django Queryset аннотирует на основе уникального значения
Я пытаюсь написать операцию queryset, которая преобразует первую таблицу во вторую как можно эффективнее. Вот критерий: Для каждого названия, сколько уникальных школ связано с ним? Кроме того, точные имена и школы заранее неизвестны.
| Name | School |
|---|---|
| John | USC |
| John | USC |
| John | UCLA |
| Adam | UCSD |
| Adam | USC |
| Name | num_unique_schools |
|---|---|
| John | 2 |
| Adam | 2 |
1- Использование метода Values:
Студенты будут сгруппированы по имени, поэтому вы получите аннотированный результат только для каждого уникального имени студента.
2- Использование метода Count с аргументом distinct:
Это подсчет сгруппированных имен учеников на основе "школы", также удаляются дубликаты школ.
подобно этому:
from django.db import models
results = StudentSchool.objects.values('name').annotate(
num_unique_schools = models.Count('school', distinct=True)
).order_by("name")
Тестовый случай
