我有一个包含feilds的表:file_id,rating,user_id
每个user_id有一个评级,因此单个file_id可能有很多评级(以0-5为单位)。
我想找到每个file_id的平均评分,然后显示5个具有最高平均评级的file_id。
实际上我的SQL查询看起来像:
SELECT m.server_domain, m.original_name, m.type, m.title, m.views,
m.description, m.hash, AVG(mr.rating_scale5) as avg_rating_scale5
FROM c7_media m, c7_storage s, c7_media_ratings mr
WHERE s.public=1 AND m.storage_hash = s.hash AND m.hash = mr.media_hash
GROUP BY mr.media_hash
我该怎么做?
Zeeshan
答案 0 :(得分:7)
按file_id
分组然后按平均顺序排序。切断所有低于前5名的记录。
SELECT
file_id, AVG(rating) as avg_rating
FROM
table
GROUP BY
file_id
ORDER BY
avg_rating DESC
LIMIT 5
答案 1 :(得分:1)
SELECT `file_id`, AVG(`rating`) as a FROM `table`
GROUP BY `file_id` ORDER BY a DESC LIMIT 5
将'table'替换为您的表名。