我的数据库中有几千个作业,其中有一列值为“事件”或“非事件”。大约 5% 的工作是“不活跃”的。每天都会添加工作(以数百个为单位)。当现有工作被标记为“非事件”时,我们会保持准确的比率(如果“非事件”工作太多,则删除)。
我需要按照“非事件”作业均匀分布的方式对所有作业进行排序。最佳情况下,每 20 个“活跃”职位中就有一个应该是“不活跃”职位(结果按 20 分页)。
我怎样才能做到这一点?数据库为Postgresql。
最佳答案
drop sequence rownum1 ;
create temp sequence rownum1;
drop sequence rownum2 ;
create temp sequence rownum2;
select * from(
select job_name, rownum1*20 as myorder from jobs where job_status =0
union
select job_name, rownum2 as myorder from jobs where job_status =1
)
order by myorder desc
如果他们有 1 到 20 个非事件作业与事件作业的比例,则此查询将使它们均匀分布。如果你有超过这个最佳比率,你将在查询的顶部有很多不活跃的工作。 每次运行此查询时都需要删除并重新创建 rownums 序列
关于sql - 对任意分布的结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1846342/