代码之家  ›  专栏  ›  技术社区  ›  Emily

在MySQL中求平均值

  •  0
  • Emily  · 技术社区  · 15 年前

    我有一张桌子

    汽车

     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
    

    有没有一个查询可以满足我的需要?

    3 回复  |  直到 15 年前
        1
  •  5
  •   Ben    15 年前
    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
  •  2
  •   Salandur    15 年前

    不能在1个查询中解决此问题,但必须使用2个查询或1个查询en解决代码中的总体平均值。

    select person, avg(mpg) from cat group by person
    
        3
  •  1
  •   Stefan Gehrig    15 年前
    SELECT person_id, AVG(mpg) AS mpg_avg FROM car GROUP BY person_id WITH ROLLUP
    

    这个 WITH ROLLUP -修饰符将向结果集添加一行,其中 persion_id NULL mpg_avg 是整个结果集的平均值(mysql>=4.1.1):

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