聚合以及额外的价值

时间:2019-05-02 13:40:39

标签: django django-models django-queryset

我正在尝试获取aggregate及其id。 我有一个名为Index的模型。

class Index(Model):
    correlation = DecimalField()
    company = CharField()


------------------------------
| id | correlation | company |
------------------------------
| 1  | 0.99        | A       |
| 2  | 0.43        | A       |
| 3  | 0.67        | B       |
| 4  | 0.94        | B       |
| 5  | 0.23        | C       |
------------------------------

我需要查询才能返回

[
 {
  'id': 1,
  'correlation': 0.99,
  'company': 'A'
 },
 {
  'id': 4,
  'correlation': 0.94,
  'company': 'B'
 },
 {
  'id': 5,
  'correlation': 0.23,
  'company': 'C'
 }
]

说明:由于公司A的ID为0.99的最大相关性为1,因此将其返回。 因此,基本上我需要为所有公司检索最大关联的id

我尝试了

Index.objects.values('company').annotate(correlation_max = Max('correlation'))Index.objects.values('company', 'id').annotate(correlation_max = Max('correlation'))

他们都没有工作。我无法获取id

我检查了this。但我也需要id

1 个答案:

答案 0 :(得分:2)

您可以选择所有具有相同YOUR_TOKEN_HERE的项目,将company降序排列,然后选择第一个(相关性最高):

correlation

不太优雅,我敢肯定必须有一种更优雅的方法,但是我已经对此进行了测试,并且效果很好。