2009-11-18 12 views
0

平均的平均我有一個表在MySQL的

id | person_id | mpg 
------------------------ 
4 |  1  | 50 
5 |  1  | 15 
6 |  2  | 10 
7 |  2  | 28 
8 |  3  | 33 

我需要得到每個人的MPG的平均值,然後平均爲組。

person 1 avg = (50 + 15)/2 = 32.5 
person 2 avg = (10 + 28)/2 = 19 
person 3 avg = 33 

group average = 32.5 + 19 + 33/3 = 28.1 

有沒有一個查詢會做我需要的?

+2

唐平均值的平均值,因爲你將失去平均值的權重。 即:10輛汽車平均速度爲50英里,一輛汽車在10英里/加侖「平均」時會給你30mpg作爲總平均值,這是非常錯誤的:) – 2009-11-18 12:58:30

+0

我不同意。 2個綠色汽車在50英里,2個紅色汽車在20英里和1個黑色汽車在10英里有兩個不同的結果: - 平均每件事:150/5 = 30英里 - 平均每輛車的平均值: + 20 + 10)/ 3 = 26.667 第一種選擇正如您所述,但不一定是尋找的東西! – 2009-11-18 13:07:12

+1

我將一個人的平均每小時平均值與其他人的平均每小時平均值進行比較,並以每人平均每人每小時平均值爲一組進行比較。我不希望那些擁有10到50英里的汽車的人歪曲結果。我希望他的平均得分是50分,與10分鐘有1輛車的人平均。 – Emily 2009-11-18 14:08:57

回答

5
SELECT person_id, AVG(mpg) from car group by person_id; 

如果你想獲得該組的平均,你應該這樣做:

SELECT AVG(mpg) from car; 

,除非你真的要平均的平均值,這似乎有點可疑對我說:

SELECT AVG(average) from (SELECT person_id, AVG(mpg) as average from car group by person_id); 
2

你不能在1個查詢解決這個問題,但你必須使用2個查詢或1個查詢EN解決了全部測試均在你的代碼

select person, avg(mpg) from cat group by person 
0
SELECT person_id, AVG(mpg) AS mpg_avg FROM car GROUP BY person_id WITH ROLLUP 

WITH ROLLUP -modifier將一個行添加到設置的結果,其中persion_idNULLmpg_avg和是平均在整個結果集(的MySQL> = 4.1.1):

person_id | mpg 
------------------ 
     1 | 32.5 
     2 | 19.0 
     3 | 33.0 
     NULL | 27.2