1

我有一个令人惊讶的基本问题;我认为关于平均列的答案会更直接。这是我的带有示例值的表:

表:评级

id, rating, item_id

样本数据

1, 5, 3
2, 1, 2
3, 2, 3
4, 4, 4 
5, 1, 2

如果我想获得 item_id 标记为“3”的平均评分怎么办

真正的答案是 2.5,因为 3 和 a1,另一个是 5。

这是我相信的查询:

 SELECT avg(rating) as average FROM ratings;

如何仅指定 item_id 为 3 的评级?我使用 WHERE 吗?通过...分组?别的东西?

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

4

3 回答 3

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
于 2012-06-21T22:18:46.963 回答
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;
于 2012-06-21T22:19:02.950 回答
0

您可能想检查我在大多数项目中使用的算法。它不需要任何复杂的 MySQL 语句和函数,同时平均评分值的检索和更新都只影响一行,即使您正在处理数百万个评分。一切都基于纯数学:)

检查一下,希望它有用:使用 PHP 和 MySQL 以正确的方式计算平均评分

于 2012-07-03T19:08:35.840 回答