Как мне SQL рандомизировать каждый столбец в отдельности - PullRequest
0 голосов
/ 19 марта 2019

скажем, моя таблица выглядит следующим образом.

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);

1 Ответ

0 голосов
/ 19 марта 2019

Вы, кажется, хотите разделить имена и возраст / пол случайным образом.Предполагая, что вам не нужны дубликаты, вы можете использовать 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;
...