用rand对sql查询进行排序,但有例外

bybem2ql  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(229)

我有一个有21行的表,我希望第10行20和第21行是使用查询的html表上的第10行20和第21行,尽管我希望1-9和11-19是随机的。我找不到任何关于如何为随机排序设置例外的信息。有人能帮忙吗?

k5hmc34c

k5hmc34c1#

在标准sql中,您可以使用 ROW_NUMBER 按所需顺序对行进行编号,例如按id,然后按 ORDER BY 子句首先对块进行排序(第1-9、10、11-19、20、21行),然后使用随机函数在块内无序排列。
下面是mysql。它支持 ROW_NUMBER() 从第8版开始。它的随机函数称为 RAND() . 其他dbms可能有另一个函数来获取随机数。

select t.*, 
from mytable
order by 
  case
    when row_number() over (order by id) <= 9 then 1
    when row_number() over (order by id) = 10 then 2
    when row_number() over (order by id) < 20 then 3
    when row_number() over (order by id) = 20 then 4
    when row_number() over (order by id) = 21 then 5
    else 6
  end,
  rand();

相关问题