2011-12-02 67 views
1

我的網絡服務器正在運行MySQL客戶端版本5.1.56。AVG函數在不同MySQL版本中的變化?

我的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 

開發的MySQL V5。 0.7結果

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

網站的MySQL v5.1.56導致

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

除此之外的開發環境明顯註釋應該始終與生產有人可以把如何原始查詢到另一個查詢向我解釋是的摧毀我的AVG()值到0.99999?我已經縮小到特定的行動範圍,並且僅限於本地版本的MySQL。

謝謝。

+0

「DEV MySQL」和「Web MySQL」的含義是什麼? – diEcho

+0

「rating」的數據類型是什麼? –

回答

1

here

如果遇到同樣的問題,你可以簡單地通過組合代替AVG功能SUM/COUNT. 例如,下面的查詢:

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; 
+0

就是這樣。 MySQL的錯誤。 – Drew

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 

不顯示在同一個數據相同的結果,那麼我會稱之爲一個錯誤。