sql - 对任意分布的结果进行排序

标签 sql postgresql

我的数据库中有几千个作业,其中有一列值为“事件”或“非事件”。大约 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/

相关文章:

javascript - Postgres 相当于 MySQL 的 SET?

node.js - 在 Postgres 中使用审计表为 NOTIFY/LISTEN 创建触发器是个好主意吗?

mysql - 将汇总行添加到表格末尾

sql - 如何在关系代数中表示 "not exists"?

sql - 对连接字符串的计算字段求和(拆分 acct #s)

javascript - 如何创建 pdf 文件并通过 Node.js 应用程序下载

postgresql - Unicode字符默认对照表

postgresql - PgAdmin 和 postgresql 9.3 的计数 (*) 结果显示错误

sql - HQL 选择使用日期作为标准错误

c# - SQL 批量复制截断十进制