【问题标题】:Taking Sample in SQL Query在 SQL 查询中采样
【发布时间】:2015-01-09 18:39:45
【问题描述】:

我正在解决一个类似这样的问题:

我有一个包含许多列的表,但主要是 DepartmentIdEmployeeIds

Employee Ids    Department Ids
------------------------------
A                   1
B                   1
C                   1
D                   1
AA                  2
BB                  2
CC                  2
A1                  3
B1                  3
C1                  3
D1                  3

我想编写一个 SQL 查询,以便为每个 DepartmentID 取出 2 个样本 EmployeeIds

喜欢

Employee Id  Dept Ids
B              1
C              1
AA             2
CC             2
D1             3
A1             3

目前我正在编写查询,

select
   EmployeeId, DeptIds, count(*)
from 
   table_name
group by 1,2
sample 2

但它总共给了我两行。

有什么帮助吗?

【问题讨论】:

    标签: sql teradata sample random-sample


    【解决方案1】:

    如果我知道的部门数量少,您可以进行分层抽样:

    select *
    from table_name
    sample
       when DeptIds = 1 then 2
       when DeptIds = 2 then 2
       when DeptIds = 3 then 2
    end
    

    否则是 RANDOM 和 ROW_NUMBER 的组合:

    select *
    from
     (
       sel EmployeeId, DeptIds, random(1,10000000) as rand
       from table_name
     ) as dt
    qualify
       row_number()
       over (partition by DeptIds
             order by rand) <= 2
    

    【讨论】:

    • 我在使用随机数和行号的查询中遇到错误:
    • 语法错误,预期类似名称或 unicode 分隔标识符或 'UDFCaLLName' 关键字之间的 ')' 和 'Qualify' 关键字
    • Ops,我忘记了派生表的别名,修复它,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多