假设我有一个表,其中的列name
和age
包含以下数据:
name | age
------|-----
harry | 12
adam | 13
eve | 14
jill | 14
John | 16
alice | 19
smith | 33
bill | 43
bob | 66
jones | 78
我想先按年龄的增加顺序排列行(已在上面完成)
然后,我想提供一个“组大小”,例如3。因此,请从顶部开始在精神上将表分成3行的块
name | age
------|-----
harry | 12
adam | 13
eve | 14
------------
jill | 14
John | 16
alice | 19
------------
smith | 33
bill | 43
bob | 66
------------
jones | 78
如果num行不是3的倍数,则最后一个块可以小于3。
我需要每个块中age列的顶部和底部值。因此输出应为:
min age|max age
-------|-------
12 | 14
14 | 19
33 | 66
78 | 78
使用嵌套表的幼稚方式效率不高:
select
min(T.age),
max(T.age)
from
(select
age
from
users
order by age limit 3 offset 6
) as T
我宁愿避免选择行,而只使用聚合。
数据库:MySQL和H2。
最佳答案
例如。:
SELECT MIN(age)
, MAX(age)
FROM
( SELECT x.*
, FLOOR(@i:=@i+1/3)*3 i
FROM my_table x
, (SELECT @i:=0) vars ORDER BY age,name) n
GROUP
BY i;
关于mysql - 将行分组为相等大小的块,并汇总一些列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41062947/