SQL查询 - 如何获得最高评价的项目?
问题描述:
我有两个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");
}
答
你可以计算出平均值最高在派生表,并加入到:
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;
我加id
到ORDER BY强制在你有重复的情况下一致的结果。
答
$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");
您是否尝试过运行像这样子查询?我认为这不是最有效或最准确的方法,但它可能会给你一个基本的结果,你可能会觉得有用。
理想情况下,你会处理这在后端消除游戏(在标准偏差异常值),并保持存储每个项目恒定的平均,但可能是因为你可能需要的东西太复杂。