在mySQL中平均一个总数

时间:2009-11-09 14:43:42

标签: mysql

我的表格似乎是

person_id  | car_id | miles
------------------------------
    1      |   1    |  100
    1      |   2    |  200
    2      |   3    | 1000 
    2      |   4    |  500

我需要为每个人计算总里程数,然后对这些总数进行平均。

有2个人 - 1人驾驶300英里,2人驾驶1500英里。

(300 + 1500)/ 2 =每人平均行驶900英里。

这与总计英里数除以人数相同。

我无法找出一个mySQL语句,它会给我一个人的平均值,或者给我总里程数和人数,这样我就可以进行划分。

4 个答案:

答案 0 :(得分:7)

每人总数:

SELECT person_id, SUM(miles) FROM table GROUP BY person_id

平均

SELECT SUM(miles) / COUNT(DISTINCT person_id) FROM table

这些应该可行

答案 1 :(得分:2)

只要person_idmiles被编入索引,最快的方法就是:

SELECT  SUM(miles) /
        (
        SELECT  COUNT(*)
        FROM    (
                SELECT  DISTINCT person_id
                FROM    mytable
                ) q
        )
FROM    mytable

这将允许为milesperson_id使用两个单独的索引,第一个索引不是特定顺序,第二个索引使用INDEX FOR GROUP BY

总和将按照特定顺序计算,只需要一次索引扫描,无需查表。

子查询将使用INDEX FOR GROUP BY执行一次并缓存。

因此,最终的划分将是对预先计算的和预先计算的COUNT的单一操作。

答案 2 :(得分:0)

SELECT AVG(`miles_per_person`)
FROM
   (SELECT SUM(`miles`) `miles_per_person`
      FROM `persons`
  GROUP BY `person_id`) `a`

答案 3 :(得分:0)

更正:与其他作者一样:

select sum(miles)/count(distinct person_id) avg_miles from tablename;