我有一个这种类型的表:
place time id
1. place 1 ----------------0-----------------------1
2. place 1 ----------------141---------------------2
3. place 1-----------------280---------------------3
4. place 2-----------------0----------------------- 1
5. place 2-----------------136---------------------2
6. place 2-----------------260---------------------3
我想计算每个位置的平均时间,以使结果列看起来像这样:
place time id avgTime
1. place 1 ----------------0-----------------------1------140.333
2. place 1 ----------------141---------------------2------140.333
3. place 1-----------------280---------------------3------140.333
4. place 2-----------------0-----------------------1------132
5. place 2-----------------136---------------------2------132
6. place 2-----------------260---------------------3------132
答案 0 :(得分:1)
使用窗口功能!
select t.*, avg(time * 1.0) over (partition by place) as place_avg
from t;
答案 1 :(得分:0)
您可以使用此查询
SELECT id, place, time, (SELECT AVG(time) from places WHERE places.place = pls.place GROUP BY place) as avgTime FROM `places` as pls
答案 2 :(得分:0)
这应该做你的事
SELECT *, AVG(1.0*time) OVER(PARTITION BY place)
FROM yourTable
您可以在这里进行测试
declare @table as table (place varchar(100), time int, id int )
insert into @table (place, time, id)
values
('Place1', 0, 1),
('Place1', 141, 2),
('Place1', 280, 3),
('Place2', 0, 1),
('Place2', 136, 2),
('Place2', 260, 3)
select *, avg(1.0*time) over(partition by place)
from @table
答案 3 :(得分:-1)
请尝试
select A.PLACE,
A.TIME,
A.ID,
(select avg(TIME) from AVERAGE where PLACE =A.PLACE) avgTIME
from AVERAGE A
order by PLACE,ID