Selfjoin в Django для получения списка комбинаций и их количества

к сожалению, мне сейчас не хватает правильной идеи, поэтому я пробую свой первый пост здесь:

Моя модель:

class MyModel(models.Model):
    interesting_value = PositiveIntegerField()
    other_value2 = PositiveIntegerField()
    other_value3 = PositiveIntegerField()
    ...

Теперь я хочу сделать что-то вроде этого в django:

with query as (select interesting_value, other_value2, other_value3 from mymodel)

select q1.interesting_value, q2.interesting_value, count(*) AS cnt from query q1
inner join query q2 on q1.other_value2 = q2.other_value2
                   and q1.other_value3 = q2.other_value3
                   and q1.interesting_value <> q2.interesting_value
                   and q1.interesting_value < q2.interesting_value
group by q1.interesting_value, q2.interesting_value;

Получить такой результат, который находит количество пар при заданных условиях:

q1.interesting_value, q2.interesting_value, cnt 
1,4,2
1,9,3
1,38,1
1,100,1

Как я могу реализовать эту самосвязь в Django без использования чистого SQL в моем приложении?

Чтобы получить представление о вопросе, на который я хочу ответить, вот пример: Как часто комбинация из двух экзаменов (=интересное_значение) сдается одним студентом (=другое_значение2) в одном семестре (=другое_значение3)?

Буду очень благодарен за небольшую подсказку к решению!

Ян

Вернуться на верх