我的网络服务器正在运行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。
谢谢。
答案 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。