Случайное число, основанное на группе и не должно равняться номеру строки, сгенерированному в Oracle - PullRequest
0 голосов
/ 30 января 2020

У меня есть требование поменять местами записи в группе, и сгенерированное случайное число не должно совпадать с Row_number. Я не могу написать хранимую процедуру, она должна быть с SQL

Пример:

Row_number  Group     Desired O/pRandom_number  
1            1         3
2            1         4
3            1         2
4            1         1
1            2         2
2            2         1
3            3         4
4            3         5
5            3         3

Я пытался вычислить максимальные и минимальные значения в каждой группе и генерировать случайные числа, и все выглядит хорошо. Проблема иногда в том, что случайное число будет присвоено row_number. Я всегда хочу, чтобы случайные числа и row_number всегда были разными

Ответы [ 2 ]

1 голос
/ 30 января 2020

Просто добавьте 1 и используйте модуль Arithmeti c:

select t.*,
       mod(row_number + 1, count(*) over (partition by group)) + 1 as desired
from t;
0 голосов
/ 30 января 2020

вы не хотите использовать row_number в своем решении, попробуйте использовать аналитическую функцию sum со случайным порядком строк.

Я не уверен, разрешено ли это в вашем случае или нет, но вы можно попробовать.

Sum(1) over (partition by group order by dbms_random.value())

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...