SQL查询 - 如何获得评分最高的项目?

时间:2012-02-24 00:43:10

标签: mysql sql

我有两个sql表:

item
id  name   price
1   name1  100
2   name2  100
3   name3  100
4   name4  100

rates
id item_id rating
1  1       5
2  4       4
3  2       5
4  2       3
5  3       1
...

我想展示3个平均评分最高的项目。我该怎么做?

我得到的平均项目评分如下:

$item =  mysql_query("SELECT * FROM item");
while($row = mysql_fetch_assoc($item)) {
    $id = $row['id'];
    $rate= mysql_query("SELECT AVG(rating) FROM rates WHERE id= $id");
}

2 个答案:

答案 0 :(得分:4)

您可以计算派生表中的最高平均值并加入到该值:

select i.id, i.name, i.price
from item i
join (
    select id, avg(rating) as ar
    from rates
    group by id
    order by ar desc, id
    limit 3
) dt on i.id = dt.id;

我在ORDER BY中添加了id,以便在您有重复项的情况下强制执行一致的结果。

答案 1 :(得分:1)

$item =  mysql_query("SELECT i.*, (SELECT AVG(`rating`) FROM `rates` WHERE `item_id` = i.`id`) AS `rating` FROM `item` i ORDER BY `rating` DESC LIMIT 3");

您是否尝试过像这样运行子查询?我不认为这是最有效或最准确的方法,但它可能会给你一个有用的基本结果。

理想情况下,您将在后端处理此操作以消除游戏(标准偏差中的异常值)并保持每个项目的平均存储空间,但这可能过于复杂而无法满足您的需求。