Как подсчитать количество строк с одинаковой датой, но разного типа?
У меня есть такая модель:
class Class(models.TextChoices):
STANDARD = "Standard", _("Standard")
JWW = "JWW", _("JWW")
class Competition(models.Model):
cls = models.CharField(choices=Class.choices)
date = models.DateField()
Я хотел бы получить все даты, в которые произошли стандартные Competition
и JWW Competition
. Мое текущее решение занимает много времени для небольшого количества строк (~300) и полагается на intersection
запрос.
У меня есть большой объем данных, на основе которых нужно будет выполнить расчет, поэтому чем быстрее запрос, тем лучше. Память не имеет значения.
Текущее решение:
base_runs = (
Competition.objects
.filter(cls__in={Class.JWW, Class.STANDARD})
.values("date", "cls")
)
JWW_runs = base_runs.filter(cls=Class.JWW)
standard_runs = base_runs.filter(cls=Class.STANDARD)
return JWW_runs.intersection(standard_runs).values("date").distinct().count()