Sql abs(random())%SomeNumberCreateThanzero是否可以返回零?
我在另一个答案中看到这是ORDER BY random()的另一种选择。我需要确保Sql abs(random())%SomeNumberCreateThanzero是否可以返回零?,sql,sqlite,Sql,Sqlite,我在另一个答案中看到这是ORDER BY random()的另一种选择。我需要确保id始终大于零。我是否必须将=更改为?因为x%y返回0当x是y的倍数时,答案是“是的,您的表达式可以返回0” 因此,如果id必须大于0,则需要使用而不是=。当然,如果模运算符没有返回0,您仍然可以使用>而不是=,您会得到相同的效果。因为x%y在x是y的倍数时返回0,答案是“是的,您的表达式可以返回0” 因此,如果id必须大于0,则需要使用而不是=。当然,如果模运算符没有返回0,您仍然可以使用而不是=,您将获得相同的
id
始终大于零。我是否必须将=
更改为
?因为x%y
返回0当x
是y
的倍数时,答案是“是的,您的表达式可以返回0”
因此,如果
id
必须大于0,则需要使用
而不是=
。当然,如果模运算符没有返回0,您仍然可以使用>
而不是=
,您会得到相同的效果。因为x%y
在x
是y
的倍数时返回0,答案是“是的,您的表达式可以返回0”
因此,如果
id
必须大于0,则需要使用
而不是=
。当然,如果模运算符没有返回0,您仍然可以使用
而不是=
,您将获得相同的效果。是。如果abs(random())
返回max(id)
的值,则模的结果将为零。由于abs(random())
可以返回0到9223372036854775807之间的任何值,因此这绝对是可能的。是。如果abs(random())
返回max(id)
的值,则模的结果将为零。由于abs(random())
可以返回0和9223372036854775807之间的任何值,这是绝对可能的。是的,它可以通过两种方式返回0
考虑3%3==0
,6%3==0
,等等。如果random()
恰好是max(id)
或其偶数除法器,则将得到0
random()
也可以返回0和0%anything==0
,这是另一种可能性。是的,它可以通过两种方式返回0
考虑3%3==0
,6%3==0
,等等。如果random()
恰好是max(id)
或其偶数除法器,则将得到0
random()
也可以返回0和0%anything==0
,这是另一种可能性。是的,它应该是>,因为模除可以返回0(a mod a==0
,0 mod a==0
)。此外,您可能需要检查(选择max(id)
是否不为null/0(a mod 0
在某些系统中未定义,或者a)是的,它应该是>,因为模除可以返回0(a mod a==0
,0 mod a==0
)。此外,您可能需要检查(选择max(id)
是否不为null/0)(mod 0
在某些系统中未定义,或者a)听起来1可能永远不会返回。听起来1可能永远不会返回。感谢您解释random()的范围。感谢您解释random()的范围。
SELECT foo FROM bar
WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
LIMIT 1;