我想写一条语句,该语句从一组四个值(2、4、6和8)中生成一个随机选择。以下是我到目前为止的选择语句
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
有没有更聪明的方式做到这一点?
答案 0 :(得分:0)
在我看来,您的要求可以满足,但他的声明
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()
函数。 / p>
就是这样。从(2, 4, 6, 8)
的集合中选取随机数。
答案 1 :(得分:0)
您可以使用
对数据集进行随机排序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函数返回一个numbers table on HANA database,我使用WHERE子句仅过滤您希望看到的可能的随机值
SELECT命令中的TOP 1子句返回第一个随机排序的整数
我希望对您有帮助