mysql - 如何以 N 行为一组进行 GROUP BY?

标签 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 但只能针对表的特定字段进行分组。

最佳答案

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);

关于mysql - 如何以 N 行为一组进行 GROUP BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28298862/

相关文章:

c# - asp.net 到 MySql 的问题。尝试从输入返回信息

php - PHP错误:mysqli_num_rows()期望参数1为mysqli_result,boolean给出[duplicate]

sql - UNNEST 多个值?

mysql - MYSQL表添加复合索引

mysql - SQL如何连接两个不同的表列作为结果

MySQL逐字节比较,哪个更快?二进制与 bin_collat​​e

mysql - 复杂的 SQL 表关系?

sql - 如何将日期时间值从行转换为列

mysql - 按求和变量分组

Python Pandas : Sort and group by, 然后对第二列的两个连续行求和以获得第三列的特定值