在Django查询中获取最高计数和对应值

Fra*_*Joe 2 django django-models

我有一个以“疾病”作为领域之一的患者模型。我想计算所有患者对象中的前 5 种疾病,并返回每个对象的计数。我怎么能那样做?

Anu*_*nth 5

尝试以下查询:

from django.db.models import Count

Patient.objects.values('disease').order_by().annotate(Count('disease'))
Run Code Online (Sandbox Code Playgroud)

如果您的患者表中有以下数据,

+---------+
| disease |
+---------+
| A       |
| B       |
| A       |
| C       |
| A       |
| A       |
| C       |
+---------+
Run Code Online (Sandbox Code Playgroud)

输出将是:-

<QuerySet [{'disease': 'A', 'disease__count': 4}, {'disease': 'B','disease__count': 1}, {'disease': 'C', 'disease__count': 2}]>
Run Code Online (Sandbox Code Playgroud)

有很多方法可以从这个输出中找到最大值。

from django.db.models import Count
from django.db.models import Max

Patient.objects.values('disease').order_by().annotate(disease_count=Count('disease')).aggregate(maxval=Max('disease_count'))
Run Code Online (Sandbox Code Playgroud)

输出将是:- {'maxval': 4}

或者

from django.db.models import Count

query_result = Patient.objects.values('disease').order_by().annotate(disease_count=Count('disease'))
maxval = max(query_result, key=lambda x:x['disease_count'])
Run Code Online (Sandbox Code Playgroud)

输出将是:- {'disease': 'A', 'disease_count': 4}

希望有帮助!