我有一个令人惊讶的基本问题;我认为关于平均列的答案会更直接。这是我的表格,其中包含样本值:
表:评分
id, rating, item_id
示例数据
1, 5, 3
2, 1, 2
3, 2, 3
4, 4, 4
5, 1, 2
如果我想获得item_id标记为“3”
的平均评分,该怎么办?真正的答案是2.5,因为a1为3,而5为a。
以下是我相信的查询:
SELECT avg(rating) as average FROM ratings;
如何仅指定item_id为3的评分?我使用WHERE吗?通过...分组?别的什么?
问题的第二部分:如何将其输出到单个变量中?
答案 0 :(得分:4)
您只需指定WHERE
子句:
SELECT AVG(rating) AS average
FROM ratings
WHERE item_id = 3
-- returns 1 row
如果您想获得按item_id分组的整个数据的平均值,可以使用GROUP BY
:
SELECT item_id, AVG(rating) AS average
FROM ratings
GROUP BY item_id
-- returns as many rows as the number of distinct item_ids
答案 1 :(得分:2)
嗯......你试过吗?
SELECT AVG(rating) FROM ratings WHERE item_id = 3;
如果您的rating
列是整数类型,那么您可能希望这样做:
SELECT AVG( CAST(rating AS FLOAT) ) FROM ratings WHERE item_id = 3;
如果您想将结果保存在变量中:
SELECT AVG( CAST(rating AS FLOAT) ) INTO @var FROM ratings WHERE item_id = 3;
SELECT @var;
答案 2 :(得分:0)
您可能想查看我在大多数项目中使用过的算法。它不需要任何复杂的MySQL语句和函数,同时,即使您处理数百万的评级,平均评级值的检索和更新也只影响一行。一切都基于纯数学:)
查看它,希望它有用:Calculating Average Rating the Right Way using PHP and MySQL