AVG功能在不同的MySQL版本中有变化吗?

时间:2011-12-02 09:12:01

标签: mysql

我的网络服务器正在运行MySQL客户端版本5.1.56。

我的devserver正在运行MySQL客户端版本5.0.7。

此查询在两台服务器上都给出了相同的结果:

SELECT scenario_user_ratings.userid,
       AVG(scenario_user_ratings.rating)
FROM scenario_user_ratings
GROUP BY scenario_user_ratings.userid

报告结果:

userid  AVG(scenario_user_ratings.rating)
1       3.3659
21      2.8000
22      3.2069

但此查询会产生不同的结果

SELECT * FROM ( SELECT scenario_user_ratings.userid,
                       AVG(scenario_user_ratings.rating)
                FROM scenario_user_ratings
                GROUP BY scenario_user_ratings.userid) tabl 
WHERE tabl.userid < 5

Dev MySQL v5.0.7结果

userid  AVG(scenario_user_ratings.rating)
1       0.9999  <-- average values are always this, regardless

Web MySQL v5.1.56结果

userid  AVG(scenario_user_ratings.rating)
1       3.3659  <-- correct

除了开发环境的明显评论应始终匹配生产之外,有人可以向我解释如何将原始查询放入另一个查询中将我的AVG()值调到{{1} }?我已将其缩小到该特定操作,并且仅适用于本地版本的MySQL。

谢谢。

2 个答案:

答案 0 :(得分:1)

请参阅here

如果您遇到同样的问题,可以简单地用组合SUM/COUNT.替换AVG功能 例如,以下查询:

SELECT student_name, AVG(test_score)
FROM student
GROUP BY student_name;
can be replaced by the one below:

SELECT student_name, SUM(test_score)/COUNT(test_score)
FROM student
GROUP BY student_name;

答案 1 :(得分:1)

如果:

SELECT scenario_user_ratings.userid,
       AVG(scenario_user_ratings.rating)
FROM scenario_user_ratings
GROUP BY scenario_user_ratings.userid
HAVING scenario_user_ratings.userid < 5

和此:

SELECT scenario_user_ratings.userid,
       AVG(scenario_user_ratings.rating)
FROM scenario_user_ratings
WHERE scenario_user_ratings.userid < 5
GROUP BY scenario_user_ratings.userid

和此:

SELECT * FROM ( SELECT scenario_user_ratings.userid,
                       AVG(scenario_user_ratings.rating)
                FROM scenario_user_ratings
                GROUP BY scenario_user_ratings.userid) tabl 
WHERE tabl.userid < 5

在同一数据中没有显示相同的结果,我称之为bug。