2009-12-18 72 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 

完整的查詢