Netezza 中的随机选择

Random selection in Netezza

我需要有关 Netezza 中随机 selection 的帮助。

例如,我有 4 个客户,每个客户都有一些变量选项。

客户 |变量


1    |     4
1    |     5
1    |     6
2    |     10
2    |     12
2    |     16
3    |     1
3    |     2 
3    |     3
3    |     6
4    |     5
4    |     8

而且我只需要 select 使用随机 selection 为每个客户提供一个选项。 解决方案示例:

客户 |变量


1    |     5
2    |     10
3    |     3
4    |     8

谢谢!

IBM Netezza 提供了内置的 random() 函数 Random number functions,您可以使用它来导出所需的输出。以下解决方案在 NPS Release 7.2.1.0

上测试

测试数据:

create table TEST 
(
Customer int,
Variable int

)
distribute on random;

insert into TEST values(1,4);
insert into TEST values(1,5);
insert into TEST values(1,6);
insert into TEST values(2,10);
insert into TEST values(2,12);
insert into TEST values(2,16);
insert into TEST values(3,1);
insert into TEST values(3,2 );
insert into TEST values(3,3);
insert into TEST values(3,6);
insert into TEST values(4,5);
insert into TEST values(4,8);

解法:

    SELECT CUSTOMER
        ,max(VARIABLE) AS VARIABLE
    FROM (
        SELECT CUSTOMER 
            ,first_value(VARIABLE) OVER (
                PARTITION BY CUSTOMER ORDER BY random()
                ) AS VARIABLE

        FROM TEST
        ) a

GROUP BY CUSTOMER
ORDER BY 1;

输出迭代 1:

CUSTOMER VARIABLE
1           5
2           16
3           2
4           8

输出迭代 2:

CUSTOMER VARIABLE
1           6
2           10
3           1
4           5