abs(random()) % someNumberGreaterThanZero 可以返回零吗?

发布于 2024-10-20 13:24:23 字数 226 浏览 2 评论 0原文

SELECT foo FROM bar
WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
LIMIT 1;

我在另一个答案中看到了这一点,作为 ORDER BY random() 的替代方案。我需要确保 id 始终大于零。我必须将 >= 更改为 > 吗?

SELECT foo FROM bar
WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
LIMIT 1;

I saw this in another answer as an alternative to ORDER BY random(). I need to make sure id would always be greater than zero. Do I have to change >= to >?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

黑凤梨 2024-10-27 13:24:23

由于当 xy 的倍数时,x % y 返回 0,因此答案是“是的,您的表达式可以返回 0”。

因此,如果 id 必须大于 0,则需要使用 > 而不是 >=。当然,如果模运算符不返回 0,您仍然可以使用 > 而不是 >=,并且会得到相同的效果。

Since x % y returns 0 when x is a multiple of y, the answer is "Yes, your expression could return 0".

So, if id must be greater than 0, you need to use > rather than >=. Of course, if the modulo operator didn't return 0, you could still use > instead of >= and you'd get the same effect.

魄砕の薆 2024-10-27 13:24:23

是的。如果 abs(random()) 返回 max(id) 的值,则模数结果将为零。由于 abs(random()) 可以返回 0 到 0 之间的任何值。 9223372036854775807,这绝对是可能的。

Yes. If abs(random()) returned the value of max(id), then the modulo's result would be zero. Since abs(random()) can return any value between 0 & 9223372036854775807, this is definitely possible.

千笙结 2024-10-27 13:24:23

是的,它可以通过两种方式返回 0

考虑 3 % 3 == 06 % 3 == 0 等。如果 随机,您将得到 0 () 恰好是 max(id) 或其偶数除法器。

random() 还可以返回 0 和 0 % everything == 0,这是另一种可能性。

Yes it can return 0 in two ways

Consider that 3 % 3 == 0, 6 % 3 == 0, etc. Then you would get 0 if random() happens to be max(id) or an even divider thereof.

random() can also return 0 and 0 % anything == 0, that is the other possibility.

沒落の蓅哖 2024-10-27 13:24:23

是的,应该是>因为模除法可以返回 0(a mod a ==0, 0 mod a == 0)。另外,您可能想检查 (SELECT max(id) 是否不为 null/0(a mod 0 在某些系统中未定义,或者 a)

Yes, it should be > because modulo division can return 0( a mod a ==0, 0 mod a == 0). Also, you might want to check if (SELECT max(id) is not null/0 (a mod 0 is undefined in some systems, or a)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文