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的。谢谢