MySQL - 获取行的行数和平均值

时间:2013-10-27 01:29:41

标签: mysql

首先,我只是警告大家我是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

1 个答案:

答案 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