查询以获取评分最高的 x,评分最低的 x 人

Posted

技术标签:

【中文标题】查询以获取评分最高的 x,评分最低的 x 人【英文标题】:Query to fetch highest rated x with mimimum x people rated 【发布时间】:2020-04-30 23:50:57 【问题描述】:

模型.py

class Movie(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100)
    vote_count = models.IntegerField()

class Watchlist(models.Model):
    userid = models.IntegerField()
    movie_id = models.ForeignKey(Movie, on_delete=models.CASCADE)
    rating = models.IntegerField()

查询以获取评分最高且至少有 5 人评分的电影。

【问题讨论】:

您好,欢迎来到***,我邀请您阅读:***.com/help/how-to-ask, ***.com/questions/59728819/…的可能重复 如果你想讨论如何做,或者展示你在做什么以及你在哪里卡住以便其他人可以帮助,你可以添加一个小例子 【参考方案1】:

您应该阅读有关django's annotation. 的基础知识 在你的情况下,这样的事情应该可以工作:

from django.db.models import Count, Sum, F

qs = Movie.objects.annotate(vote_count=Count('watchlist_set'), 
                            vote_sum=Sum('watchlist_set__rating'), 
                            rating = F('vote_sum')/F('vote_count')

    ).filter(
        vote_count__gte=5,
    ).order_by(
        '-rating'
    )

【讨论】:

以上是关于查询以获取评分最高的 x,评分最低的 x 人的主要内容,如果未能解决你的问题,请参考以下文章

自作评分游戏

Pandas实现groupby分组聚合后不同列数据统计

歌手比赛

GridSearchCV上的自定义评分,具有折叠相关参数

L2-015 互评成绩(排序)

SQL - 按类型获取评分最高的电影