问题描述
SQL查询是:
Select ProductName from Products;
上面的查询返回5000行。
如何将5000行的结果分为两个分别为2500行的结果集,即一个结果集从1到2500,另一个结果集从2501到5000?
注意:
- 这里ProductName是主键。表中没有ProductID列。
- 它可以在后端或前端完成。
解决方法
一种适用于mySQL的方法(基于此答案https://stackoverflow.com/a/4741301/14015737):
上半部
SELECT *
FROM (
SELECT test.*,@counter := @counter +1 counter
FROM (select @counter:=0) initvar,test
ORDER BY num
) X
WHERE counter <= round(50/100 * @counter);
ORDER BY num;
下半部
反转排序顺序并删除四舍五入
SELECT *
FROM (
SELECT test.*,test
ORDER BY num DESC
) X
WHERE counter <= (50/100 * @counter);
ORDER BY num;
在记录数量不均匀的情况下,在此示例中,中间记录将添加到上半部分。如果您想以其他方式使用它,请将round()
移至另一条语句。如果您根本不想要它,请删除round()
。
Dbfiddle示例:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=fb70eae0f7f1434a24099b5bb19f0878