【问题标题】:Django: Queryset replacement for group by aggregate?Django:查询集替换按聚合分组?
【发布时间】:2014-07-01 10:42:29
【问题描述】:

我的表结构:

id | file_id(foreign key) | version_id(foreign key) | function_id(foreign key)

id 和 (file_id, version_id, function_id) 是唯一的。

我正在寻找可以模拟以下 sql 查询的 Django 查询集:

select *, max(version_id) from change_metrics group by function_id order by version_id

基本上我需要为所有独特的文件功能组合获取最新版本,因为可以存在特定文件功能组合的多个版本。我目前正在使用原始 sql 查询,我想用查询集替换它们。

我无法更改数据库结构,但我对各种 sql 查询或解决此问题的方法持开放态度

【问题讨论】:

  • 请发布您正在使用的模型。

标签: sql database django sqlite django-queryset


【解决方案1】:

假设您的模型如下所示:

class Function(models.Model):
    pass

class File(models.Model):
    pass

class Version(models.Model):
    pass

class ChangeMetric(models.Model):
    function = models.ForeignKey(Function)
    file = models.ForeignKey(File)
    version = models.ForeignKey(Version)

您应该能够做到以下几点:

from django.db.models import Max
Function.objects.all().annotate(max_version=Max('changemetric_set__version___id'))

【讨论】:

    【解决方案2】:

    你可以使用:

    从 django.db.models 导入 Max q = change_metrics.objects.annotate(Max('version_id')).order_by('version_id')

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2019-12-04
      • 1970-01-01
      相关资源
      最近更新 更多