我有两个模特儿困惑和玩。每出戏我都有一个评分。我想注释到一个难题,设置所有相应的游戏的中值评级值。
class Puzzle(models.Model):
name = models.CharField(max_length=255)
class Play(models.Model):
puzzle = models.ForeignKey(Puzzle, on_delete=models.CASCADE,related_name='plays')
rating = models.IntegerField(default=-1)
puzzle_completed = models.BooleanField(default=None, blank=False, null=False)
我知道怎么数:
Puzzle.objects.annotate(nb_sucesses=Count('plays', filter = Q(plays__puzzle_completed=True), distinct = True),)
我希望以类似的方式得到中位数:
Puzzle.objects.annotate(rating_median=Median('plays__rating', filter = Q(plays__puzzle_completed=True), distinct = True),)
但是,显然由于我的Django开发环境数据库(sqlite),我无法做到这一点。
根据我从下面的信息environment(MariaDB),中得出的结论,在我的生产https://mariadb.com/kb/en/median/中,这种方法应该可以工作(但我还没有测试它)
我目前的理解(基于不同的互联网搜索)是,我应该能够使用Django ()函数来使用一个定制的中间函数(遵循这个模式?),它可以在生产中调用中位数if,或者在开发中调用更为复杂的sql查询(基于这张吗?或这张吗?)。
但几个小时后,我必须承认我在这里已经超出了我的深度。
有人能帮我把点连起来吗?
发布于 2020-01-12 21:12:28
发布于 2020-05-21 15:38:42
关于如何在使用PostgreSQL时做到这一点,请参考我在Django & Postgres -百分位数(中位数)和组的答案。
可以创建一个Median
子类的Aggregate
,然后它的行为类似于其他聚合函数。
https://stackoverflow.com/questions/59707982
复制相似问题