首先,我只是警告大家我是MySQL的新手。另外,我没有测试下面的示例查询,因此它们可能不完美。
无论如何,我有一个项目表,每个项目都有一个名称,一个类别和一个分数。每12小时拍摄,使用然后移除顶部物品。
到目前为止,我只是用
抓住了顶级项目SELECT * FROM items_table ORDER BY score DESC LIMIT 1
唯一的问题是某些类别存在偏见并且通常具有更高的分数。我想通过将得分除以平均得分而不是简单地按得分排序来解决这个问题。像
这样的东西ORDER BY score/(GREATEST(5,averageScore))
我现在正试图找出找到averageScore的最佳方法。我有另一个类别表,所以很明显我可以添加一个averageScore列并运行一个cronjob来保持更新并使用类似
的方式检索它们SELECT * FROM items_table, categories_table WHERE items_table.category = categories_table.category ORDER BY items_table.score/(GREATEST(5,categories_table.averageScore)) DESC LIMIT 1
但这感觉很乱。我知道我可以使用像
这样的东西找到所有平均值SELECT AVG(score) FROM items_table GROUP BY category
我想知道的是,是否有某种方法可以在一个查询中检索平均值。
谢谢,
YM
答案 0 :(得分:1)
您可以加入计算平均值的查询:
SELECT i.*
FROM items_table i JOIN (
SELECT category, AVG(score) AS averageScore
FROM items_table
GROUP BY category
) t USING (category)
ORDER BY i.score/GREATEST(5, t.averageScore) DESC
LIMIT 1