将SQL结果分为两半

问题描述

SQL查询是:

Select ProductName from Products;

上面的查询返回5000行。

如何将5000行的结果分为两个分别为2500行的结果集,即一个结果集从1到2500,另一个结果集从2501到5000?

注意:

  1. 这里ProductName是主键。表中没有ProductID列。
  2. 它可以在后端或前端完成。

解决方法

一种适用于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