Mysql 限制N分组查询最小值和最大值

Mysql Query Min And Max with Limit N Grouping

我想请教一些关于查询的问题。

这是我的情况:

结构Table

codenumber  varchar (PK)
prize       varchar
batchno     double
category    varchar

数据库中的示例数据:

Code        Prize       BatchNumber Category
1000000231  TRY AGAIN   1           A
1000000238  TRY AGAIN   2           A
1000000376  TRY AGAIN   3           A
1000000473  TRY AGAIN   4           A
1000000934  50          5           A
1000001281  50          6           B
1000001894  50          7           B
1000002014  TRY AGAIN   8           B
1000002831  TRY AGAIN   9           B
1000003123  TRY AGAIN   10          B
1000003158  TRY AGAIN   11          C
1000003224  TRY AGAIN   12          C
1000003524  TRY AGAIN   13          C
1000003598  50          14          C
1000003616  TRY AGAIN   15          C
1000003657  TRY AGAIN   16          A
1000003959  50          17          A
1000004289  TRY AGAIN   18          A
1000004529  TRY AGAIN   19          A
1000004853  TRY AGAIN   20          A
1000005683  TRY AGAIN   21          B
1000005728  100         22          B
1000005816  TRY AGAIN   23          B
1000006325  TRY AGAIN   24          B

我想获取每 5 行的最小和最大批号。 那么如何得到如下查询结果:

Category        MinBatch        MaxBatch
A               1               5
B               6               10
C               11              15
A               16              20
B               21              24      

请帮忙谢谢

下面的查询会给你结果

select category, min(batchnumber)as 'MinBatch', max(batchnumber)as 'MaxBatch'
from tablename order group by (category)

假设batch表示确定5人一组的顺序,你可以用变量来做到这一点:

select category, min(batch), max(batch)
from (select s.*, (@rn := @rn + 1) as rn
      from structure s cross join
           (select @rn := 0) params
      order by batch
     ) s
group by floor((rn - 1) / 5)
order by min(batch);

实际上,如果您知道批次是连续的且没有间隙并且从 1 开始:

select category, min(batch), max(batch)
from structure s
group by floor((batch - 1) / 5)
order by min(batch);