我知道我们可以在配置单元中使用大约Row_Number() OVER (partition by deptid ORDER BY rand() desc)(假设我们想要在一些分区中随机获取一些行数据)进行一些随机采样.

但是,我不知道如何根据一个列值获取一些行.例如,我们希望获得一些按薪资加权的数据.如何做到这一点?

数据,如

create table employee (empid int ,deptid int ,salary decimal(10,2))
insert into employee values(1,10,5500.00)
insert into employee values(2,10,4500.00)
insert into employee values(3,20,1900.00)
insert into employee values(4,20,4800.00)
insert into employee values(5,40,6500.00)
insert into employee values(6,40,14500.00)
insert into employee values(7,40,44500.00)
insert into employee values(8,50,6500.00)
insert into employee values(9,50,7500.00)

有没有办法在蜂巢里做到这一点?

推荐答案

这里有一个简单的 idea ,可以根据工资的划分来挑选样本记录. 你可以使用-

  1. 按工资桶划分.您可以使用CAST(Salary/10000作为int)来存储它们.您可以将10000更改为任何数字,以创建您 Select 的存储桶.如果 Select 10000,根据您的示例,4500、5500、1900等将转到分区1,14500将转到分区2,44500将转到分区3,依此类推.
  2. order by rand()-这将在上面的分区中给你随机的顺序.

SQL-

select * from (
select e.* ,
row_number() over(partition by cast(salary/10000 as INT) order by rand()) rn
from employee e)rs where rn <3 -- choose 2 records per partition

现在,我对加权抽样的 idea 可以很简单,比如根据分区 Select 样本记录,也可以像根据工资的大小 Select 样本记录一样复杂.对于第二种情况,您需要调整Order By.

enter image description here

Sql相关问答推荐

在postgresql中使用来自另一个字段的日期名称作为JSONB查询中的关键字

将SEMI JOIN、ANTI JOIN转换为非连接SQL

用于动态查询情况的存储过程常识模式

如何连接第二个表并将其内容输入到第一个表的单个字段中?

如何在联接条件不匹配时按日期获取上一条记录

替换上一个或下一个值中的空值并添加其价格日期

SQL SELECT MOST NEST TIMESTAMP BEAT ORDER

基于另一个(SAS、SQL)中的值更新列

将一名成员金额分配给群组内的其他成员

如何从一张表中获取值在至少三行相同的记录

如何使用Informix创建一个临时表,将数据从根表导入并使用筛选条件

为什么 get_json_object() 无法从存储在 Hive SQL 表中的 JSON 中提取值?

如何在 DAX 中通过 Window 函数应用订单

添加一列并根据其他列值进行填充

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

Select 给定类别列表(或更多类别)中的所有事物

基于源表的 SQL INSERT、UPDATE 和 DELETE

如何在 RavenDB Studio (RQL) 中插入更新文档

创建一个将层次 struct 级别放入列中的查询

使用 SQL 表中的连接列删除重复记录