2009-12-18 75 views
0

我有2列,一个名为rating_average,一个名为rating_count。MySQL选择最高评分

我需要选择具有最高评分的3行,评分计数也考虑到等式中。

+0

*“...评分最高,评分数也计算在等式中。”*我不遵循你的意思。计数是平均值的一个方面,它已经被“考虑进去”('average = sum/count' [基本上])。 –

回答

2

您可以通过从句做数学题的顺序,如:

select * 
from  YourTable 
order by rating_average * rating_count DESC 
limit  3 

在MySQL中,你可以在查询的末尾添加limit限制行集前N行。

如果您举一个例子,我们可能会为您提供更具体的解决方案。

0
SELECT * FROM table ORDER BY rating_average DESC LIMIT 3 

这可能有效,但您应该发布模式,以便我们可以确切地看到您想要的。

0

您想如何精确计算评分计数?如果你想限制可以说至少有3个等级的物品,你可以这样做:

SELECT rating_average, rating_count 
FROM mytable 
WHERE rating_count > 3 
ORDER BY rating_average DESC 
LIMIT 3 
1
SELECT * 
FROM table 
ORDER BY rating_average DESC, 
     rating_count DESC 
LIMIT 3 

这给人的第一3行,首先由rating_average,然后通过分类RATING_COUNT。

例子:

================================= 
| rating_average | rating_count | 
================================= 
|  9.1  |  5  | 
|  8.9  |  9  | 
|  8.9  |  3  | 
================================= 
+0

-1两个'order by'连续出现语法错误 – Andomar

+0

复制并粘贴错误,更正 –

+0

好吧,downvote删除:) – Andomar

0

如果你没有rating_average和RATING_COUNT下手,但你仍想有结果通过Andomar给出,这里只使用表“产品”和“评论”



    SELECT products.title,reviews.fk_productid, 
    COUNT(reviews.review_id) AS review_count, 
    AVG(reviews.rating) AS rating_average, 
    COUNT(reviews.review_id) * AVG(reviews.rating) AS total_score 
    FROM reviews 
    INNER JOIN products 
    ON products.product_id = reviews.fk_productid 
    GROUP BY fk_productid 
    ORDER BY total_score DESC 

完整的查询