Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
Mysql 我应该如何构造查询以按最佳评级对列表进行排序?_Mysql - Fatal编程技术网

Mysql 我应该如何构造查询以按最佳评级对列表进行排序?

Mysql 我应该如何构造查询以按最佳评级对列表进行排序?,mysql,Mysql,我有一个列表和一个评论表。我想排序的最佳评级列表,但我的想法有一个问题。。。如果我按平均评级排序,平均5颗星但只有一个评论的列表在列表中的排名将高于平均4.5颗星的500个评论的列表。如果我有以下问题,我如何解决这个问题 SELECT l.listing_id, l.listing_title, COUNT(rev.review_id) AS total_reviews, (FLOOR(((SUM(rev.score) / COUNT(rev.review_id))) * 2) / 2)

我有一个列表和一个评论表。我想排序的最佳评级列表,但我的想法有一个问题。。。如果我按平均评级排序,平均5颗星但只有一个评论的列表在列表中的排名将高于平均4.5颗星的500个评论的列表。如果我有以下问题,我如何解决这个问题

SELECT
  l.listing_id, l.listing_title,
  COUNT(rev.review_id) AS total_reviews, (FLOOR(((SUM(rev.score) / COUNT(rev.review_id))) * 2) / 2) AS stars
FROM listings AS l
LEFT JOIN reviews AS rev ON l.listing_id = r.review_listing_id
GROUP BY l.listing_id
ORDER BY {what to order by}

你需要一些公式

示例来自:

加权评级(WR)=(v÷(v+m))×R+(m÷(v+m))×C

其中:

R=电影的平均值(平均值)=(评级)
v=电影的票数=(票数)
m=需要列入前250名(目前为25000名)的最低票数
C=整个报告的平均投票数

因此,您可以通过以下方式:

SELECT
    l.listing_id, l.listing_title,
    COUNT(r.review_id) AS total_reviews, 
    (FLOOR((AVG(rev.score) * 2) / 2) AS stars,
    (
        SELECT 
            AVG(FLOOR(AVG(rev.score) * 2) / 2)
        FROM 
            reviews AS r 
        INNER JOIN 
            listings AS l ON r.review_listing_id = l.listing_id
    ) as totalAvg,
    ((total_reviews / (total_reviews+5)) * stars + (5 / (total_reviews+5)) * totalAvg) AS wr
FROM 
    listings AS l
LEFT JOIN 
    reviews AS rev ON l.listing_id = r.review_listing_id
GROUP BY 
    l.listing_id
ORDER BY
    wr


编辑:查询不正确

我认为这个问题在MySQL中没有解决。你会发现很多评级系统在提交x个评论之前不会发布平均评级。例如,如果经常在网上看到“这个列表需要5次以上的评论才能进行评级”。我看到了这个公式,但我不太明白他们对M变量的定义是什么意思。。。如果你不在乎最低票数怎么办?这还会包括所有列表吗?@ShoeLace1291如果您没有最小值,只需使用
1
@ShoeLace1291,或者您可以根据您认为重要的内容使用自己的公式。知道我为什么会出现“字段列表中的未知列总数”错误吗?