具有特定参数的MySQL / PHP平均列值

时间:2012-06-21 22:02:55

标签: php mysql sql average

我有一个令人惊讶的基本问题;我认为关于平均列的答案会更直接。这是我的表格,其中包含样本值:

表:评分

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吗?通过...分组?别的什么?

问题的第二部分:如何将其输出到单个变量中?

3 个答案:

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