我有一个名为PEOPLE
的表,其中包含以下数据:
MYNAME AGE MYDATE
==========================
MARIO 20 2015/02/03
MARIA 10 2015/02/02
PEDRO 40 2015/02/01
JUAN 15 2015/01/03
PEPE 20 2015/01/02
JULIA 30 2015/01/01
JUANI 50 2014/02/03
MARTIN 10 2014/02/03
NASH 21 2014/02/03
然后我希望得到按MYDATE
降序排列的3人排序组的人的年龄平均值。
我的意思是,我正在寻找的结果将是:
23,3
21,6
27
23,3
是年龄的平均值:
MARIO 20 2015/02/03
MARIA 10 2015/02/02
PEDRO 40 2015/02/01
21,6
是年龄的平均值:
JUAN 15 2015/01/03
PEPE 20 2015/01/02
JULIA 30 2015/01/01
27
是年龄的平均值:
JUANI 50 2014/02/03
MARTIN 10 2014/02/03
NASH 21 2014/02/03
我怎么能处理这个?我知道如何使用GROUP BY
,但只能对表格的特定字段进行分组。
答案 0 :(得分:4)
SQL表本质上是无序的,因此我假设您希望按mydate
降序排序。您可以使用变量枚举行,使用算法来定义组,然后获得平均值:
select avg(age)
from (select t.*, (@rn := @rn + 1) as seqnum
from table t cross join
(select @rn := 0) vars
order by mydate desc
) t
group by floor((seqnum - 1) / 3);
答案 1 :(得分:1)
尝试 - 然后您也可以使用Grp来获得与平均相关的三个人
select MYNAME, AGE, MYDATE, RN / 3 As Grp into #x
from
(select MYNAME, AGE , MYDATE, ROW_NUMBER() over(order by MyDate) + 2 as RN
from MYdata)x
select Grp, AVG(Age) as AvgAge
From #x
Group By Grp