我的桌子看起来像
person_id | car_id | miles
------------------------------
1 | 1 | 100
1 | 2 | 200
2 | 3 | 1000
2 | 4 | 500我需要计算每个人的总里程数,然后对总里程数求平均值。
有两个人-人1开了300英里,人2开了1500英里。
(300+1500)/2 = 900人均行驶里程数。
这与总里程数除以人数是一样的。
我找不出一个mySQL语句,它既可以给出人的平均值,也不能给我总的里程数和人口数,这样我就可以做除法了。
发布于 2009-11-09 22:47:33
人均合计:
SELECT person_id, SUM(miles) FROM table GROUP BY person_id平均值
SELECT SUM(miles) / COUNT(DISTINCT person_id) FROM table这些应该是有效的
发布于 2009-11-09 23:07:36
一旦索引了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的单一操作。
发布于 2009-11-09 22:47:32
SELECT AVG(`miles_per_person`)
FROM
(SELECT SUM(`miles`) `miles_per_person`
FROM `persons`
GROUP BY `person_id`) `a`https://stackoverflow.com/questions/1701440
复制相似问题