如何在N行的组中进行GROUP BY?

时间:2015-02-03 12:22:58

标签: mysql sql group-by ado

我有一个名为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,但只能对表格的特定字段进行分组。

2 个答案:

答案 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