在 table 列 oracle 中混淆名称
Jumble up names in the table column oracle
我的要求是混淆 oracle table 中的名称以进行混淆,如下所示
规则
- 同一条记录不能重名
- 混音应该根据性别来进行
- 逻辑应该是完全随机的
Table 员工
ID
Name
Gender
1
Peter
M
2
Pascal
M
3
Robin
M
4
Stephanie
F
5
Arya
F
Table 员工 -expcted
ID
Name
Gender
1
Robin
M
2
Peter
M
3
Pascal
M
4
Arya
F
5
Stephanie
F
下面link提到了我到目前为止尝试过的方法,但不知何故我无法修复它,因为数据可能数以百万计
http://sqlfiddle.com/#!4/460bda/5
您可以使用 row_number()
:
随机分配每个性别的名字
select e.*, e2.name as new_name
from (select e.*,
row_number() over (partition by gender order by name) as seqnum
from employee e
) e join
(select e.*,
row_number() over (partition by gender order by dbms_random.random()) as seqnum
from employee e
) e2
on e.gender = e2.gender and e.seqnum = e2.seqnum;
这并不能保证名称永远不会被重复使用。事实上,考虑到其他限制,这是不可能的——一个性别可能只有一个名字。但是,这会随机分配名称,因此不太可能保持相同的名称。
如果您的名字可以重复,请使用 dense_rank()
而不是 row_number()
。
Here 是一个 db<>fiddle.
您可以使用“转移”方法避免将名称映射回相同的名称。然而,这种转变是可以撤销的。随机分配名称且重新分配的概率非常小的解决方案可能更适合混淆。
我的要求是混淆 oracle table 中的名称以进行混淆,如下所示
规则
- 同一条记录不能重名
- 混音应该根据性别来进行
- 逻辑应该是完全随机的
Table 员工
ID | Name | Gender |
---|---|---|
1 | Peter | M |
2 | Pascal | M |
3 | Robin | M |
4 | Stephanie | F |
5 | Arya | F |
Table 员工 -expcted
ID | Name | Gender |
---|---|---|
1 | Robin | M |
2 | Peter | M |
3 | Pascal | M |
4 | Arya | F |
5 | Stephanie | F |
下面link提到了我到目前为止尝试过的方法,但不知何故我无法修复它,因为数据可能数以百万计 http://sqlfiddle.com/#!4/460bda/5
您可以使用 row_number()
:
select e.*, e2.name as new_name
from (select e.*,
row_number() over (partition by gender order by name) as seqnum
from employee e
) e join
(select e.*,
row_number() over (partition by gender order by dbms_random.random()) as seqnum
from employee e
) e2
on e.gender = e2.gender and e.seqnum = e2.seqnum;
这并不能保证名称永远不会被重复使用。事实上,考虑到其他限制,这是不可能的——一个性别可能只有一个名字。但是,这会随机分配名称,因此不太可能保持相同的名称。
如果您的名字可以重复,请使用 dense_rank()
而不是 row_number()
。
Here 是一个 db<>fiddle.
您可以使用“转移”方法避免将名称映射回相同的名称。然而,这种转变是可以撤销的。随机分配名称且重新分配的概率非常小的解决方案可能更适合混淆。