【问题标题】:How do I SQL Randomize each column individually如何 SQL 单独随机化每一列
【发布时间】:2019-08-10 01:07:36
【问题描述】:

假设我的桌子是这样的。

Input: Table Person
ID | first_name | last_name | age | gender
1  | Robert     | Müller    | 34  | m
2  | Jannis     | Fischer   | 19  | m
3  | Monika     | Schmid    | 54  | f

目的是用表本身“创建”数据。我想随机化我表的中心列并将它们重新组合在一起。

我想将 first_name 与性别随机化,以使它们始终相同,并且 last_name 和 age 可以通过它们的列随机化。

Output: Table Person

ID | first_name | last_name | age | gender
1  | Robert     | Schmid    |  34 | m
2  | Monika     | Müller    |  54 | f
3  | Jannis     | Fischer   |  19 | m

我尝试加入两个 select 语句,但这并没有真正奏效。

我可能是这样的:

Select ID, first_name, gender From Person TABLESAMPLE SYSTEM(10);

UNION

Select ID, last_name, age From Person TABLESAMPLE SYSTEM(10);

【问题讨论】:

  • 你在使用 Postgres 吗?也许这样:gitlab.com/dalibo/postgresql_anonymizer 适合你(例如 shuffle_column() 函数)
  • UNION 用于合并两个表中具有相同架构的行。
  • 是的,所以 UNION 应该是对的,但我不是说我想自己加入这个表。我在 HANA 上
  • UNION正确的,至少不是你写的那样:这将产生(无论如何)一个表格,其中一列有名字和姓氏,另一个有性别和年龄。
  • 啊,是的,但是我能用什么呢?

标签: sql join select random


【解决方案1】:

您似乎想随机拆分姓名和年龄/性别。假设您不想重复,那么您可以使用row_number() 和随机数生成器。您还没有指定数据库,但想法是:

select seqnum as id,
       pn.first_name, pn.last_name, pd.age, pd.gender
from (select p.*, row_number() over (order by random()) as seqnum
      from persons
     ) pn join
     (select p.*, row_number() over (order by random()) as seqnum
      from persons
     ) pd 
     on pn.seqnum = pd.seqnum;

【讨论】:

  • Cheers Mate 花了我一段时间,但这是您的正确方法,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 2018-09-23
  • 1970-01-01
  • 2015-12-27
  • 2011-12-06
相关资源
最近更新 更多