sql - Django ORM:区分和注释
问题描述
假设我有一张这样的桌子:
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 以显示每个开发人员关闭的团队票证的百分比,并按贡献级别对开发人员进行排名。像这样的东西: 有没有办法在一个查询中做到这一点?
我试图用不同的子句来思考注释的方向
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.
解决方案
的原因NotImplementedError
是
让您知道您目前无法将 annotate 和 distinct (with fields) 组合在一起,这意味着它现在不起作用。(@Chris Pratt 在这个问题的评论中说)
也许这有帮助:
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
);
""")
推荐阅读
- javascript - 当我保存方法的返回时,它保存未定义
- laravel-8 - Doctrine\DBAL\Driver\PDO\Exception SQLSTATE[28000] [1045] Access denied for user 我得到一个错误
- html - 如何为 tbody 中的所有表数据设置一个表头?
- javascript - 如何下载远程图像然后将图像作为图像文件上传以进行表单提交?
- r - 如何在 Rstudio 上的模糊逻辑变量中同时使用多个成员资格(三角形和梯形)?
- kerberos - traefik v2 重定向 TCP 请求
- macros - Doyxgen一次性宏扩展/扩展命令
- jenkins - 尝试使用 Homebrew 安装 jenkins 时出错
- azure-blob-storage - Azure Blob 存储不在本地存储
- c++ - C++ 使用 OpenMP #pragma 和 std:thread?