Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Django ORM:不同的和注释的_Sql_Django_Postgresql_Django Models - Fatal编程技术网

Sql Django ORM:不同的和注释的

Sql Django ORM:不同的和注释的,sql,django,postgresql,django-models,Sql,Django,Postgresql,Django Models,假设我有一张这样的桌子: class Developer(models.Model): first_name = models.CharField(max_length=255) last_name= models.CharField(max_length=255) team = models.CharField(max_length=255) closed_tickets = models.IntegerField() objects = Develo

假设我有一张这样的桌子:

class Developer(models.Model):
    first_name = models.CharField(max_length=255)
    last_name= models.CharField(max_length=255)
    team = models.CharField(max_length=255)
    closed_tickets = models.IntegerField()

    objects = DeveloperManager()
我想写一个查询,返回:

编写SQL以显示每个开发人员关闭的团队票证的百分比,并按贡献级别对开发人员进行排名。 大概是这样的: 有没有办法在一个查询中找到它

我试图用distinct子句朝注释的方向思考

class DeveloperManager(models.Manager):
    def rank(self):
        return self.order_by('team').annotate(
            total=models.Sum(
                'closed_tickets'
            ),
            piece=models.F('closed_tickets') / models.F('total'),
        ).distinct('team').values()
但它返回了一个错误:

NotImplementedError: annotate() + distinct(fields) is not implemented.

未实现错误的原因是

让您知道,您不能将annotate和distinct(带 字段),这意味着它不能正常工作 现在。(@chrispratt在评论中说)

也许这有助于:

Developer.objects.raw("""
    select *, rank() over (partition by team order by percentage desc) as rank
    from (
          select *,
                 closed_tickets * 100 / (
                     select sum(closed_tickets) total
                     from t_developer
                     where team = tmp1.team
                     group by team
                 ) percentage
          from t_developer tmp1
    );
""")

你最终忘记了作为foo的
。谢谢