Генератор случайных чисел SAP HANA - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу написать инструкцию, которая генерирует случайный выбор из набора из четырех значений (2,4,6 и 8). Ниже приведено утверждение select, которое у меня есть до сих пор

SELECT
CASE 
WHEN RN_GENERATOR.RANDOM_NUMBER BETWEEN 0 AND 2.00 THEN 2 
WHEN RN_GENERATOR.RANDOM_NUMBER BETWEEN 2.01 AND 4.00 THEN 4
WHEN RN_GENERATOR.RANDOM_NUMBER BETWEEN 4.01 AND 6.00 THEN 6
WHEN RN_GENERATOR.RANDOM_NUMBER BETWEEN 6.01 AND 8.00 THEN 8
END     AS ORDER_FREQUENCY
FROM (SELECT ROUND(RAND()*8,2) AS RANDOM_NUMBER FROM DUMMY) RN_GENERATOR

Есть ли более разумный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы можете случайным образом отсортировать набор данных с помощью

ORDER BY Rand ()

и выбрать первое в качестве случайного значения

Вот пример

select top 1 rownum 
from Numbers_Table(10) as nt 
where rownum in (2,4,6,8)
order by rand();

Функция Numbers_Table возвращает таблицу чисел в базе данных HANA , и я фильтрую только те значения, которые вы хотите видеть в качестве возможных случайных значений, используя предложение WHERE

Предложение TOP 1 вКоманда SELECT возвращает первое целое число, которое случайным образом упорядочено

Надеюсь, это поможет

0 голосов
/ 12 сентября 2018

Мне кажется, что ваше требование может быть выполнено, но его утверждение

select
        ROUND(rand()*4, 0, ROUND_CEILING) * 2 as ORDER_FREQUENCY
from dummy;

RAND() * 4 расширяет диапазон значений возможных результатов для функции RAND() с 0..1 до 0 ..4.

ROUND( ... , 0, ROUND_CEILING) округляет число до следующего большего или равного целого числа и не оставляет десятичных разрядов.Для данного примера это означает, что результат этого округления может быть только 1, 2, 3 или 4.

*2 просто отображает четыре возможных значения в целевой диапазон чисел 2, 4, 6, 8.Если умножения не хватит, вы также можете использовать для этого функцию MAP().

И все.Случайные числа, выбранные из набора (2, 4, 6, 8).

...