假设我有一个包含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。
答案 0 :(得分:1)
E.g:
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;