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);
我想请教一些关于查询的问题。
这是我的情况:
结构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);