假设我有一个表,其中的列nameage包含以下数据:

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/

10-12 07:24