我的表格似乎是
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语句,它会给我一个人的平均值,或者给我总里程数和人数,这样我就可以进行划分。
答案 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_id
和miles
被编入索引,最快的方法就是:
SELECT SUM(miles) /
(
SELECT COUNT(*)
FROM (
SELECT DISTINCT person_id
FROM mytable
) q
)
FROM mytable
这将允许为miles
和person_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;