我有一辆看起来像这样的桌车:
| mileage | carid |
------------------
| 30 | 1 |
| 50 | 1 |
| 100 | 1 |
| 0 | 2 |
| 70 | 2 |
我想得到每辆车的平均差异。所以例如对于汽车1我想得到((50-30)+(100-50))/ 2 = 35.所以我创建了以下查询
SELECT AVG(diff),carid FROM (
SELECT (mileage-
(SELECT Max(mileage) FROM car Where mileage<mileage AND carid=carid GROUP BY carid))
AS diff,carid
FROM car GROUP BY carid)
但这不起作用,因为我无法将当前行用于其他列。而且我对如何以不同的方式实际解决这个问题一无所知。 那么我怎么能以某种方式获得下一行的价值呢?
答案 0 :(得分:2)
平均差异是最大值减去最小值除以计数值小于1(你可以用算术来说服自己这是真的)。
因此:
select carid,
( (max(mileage) - min(mileage)) / nullif(count(*) - 1, 0)) as avg_diff
from cars
group by carid;