gpt4 book ai didi

mysql - 使用子查询和 rand() 进行随机采样会产生意想不到的结果

转载 作者:行者123 更新时间:2023-11-29 18:22:26 27 4
gpt4 key购买 nike

编辑:如果有什么区别,我使用的是 mysql 5.7.19。

我有一个表 A,并尝试对平均 10% 的行进行随机抽样。我决定在子查询中使用 rand() ,然后过滤掉随机结果就可以解决问题,但它给出了意想不到的结果。当我在过滤后打印出随机生成的值时,我得到的随机值与我的主查询的“where”子句不匹配,因此我认为它正在外部选择中重新生成随机值。

我想我错过了一些与子查询和执行时有关的东西,但我真的不确定发生了什么。

谁能解释一下我可能做错了什么?我查看了这篇文章:In which sequence are queries and sub-queries executed by the SQL engine? ,并且我的子查询是相关的,因此我假设我的子查询首先被执行,然后主查询将其过滤掉。根据我的假设,我不明白为什么结果具有应该被过滤掉的值。

查询:

select 
*
from
(
select
*,
rand() as rand_value
from
A
) a_rand
where
rand_value < 0.1;

结果:

--------------------------------------
| id | events | rand_value |
--------------------------------------
| c | 1 | 0.5512495763145849 | <- not what I expected
--------------------------------------

最佳答案

我无法使用 this SQL Fiddle 进行重现使用该链接并单击蓝色的 [运行 SQL] 按钮几次

CREATE TABLE Table1
(`x` int)
;

INSERT INTO Table1
(`x`)
VALUES
(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)
;

查询 1:

select 
*
from (
select
*
, rand() as rand_value
from Table1
) a_rand
where
rand_value < 0.1

[结果]:

| x |          rand_value |
|---|---------------------|
| 1 | 0.03006686086772649 |
| 1 | 0.09353976332912199 |
| 1 | 0.08519635823107917 |

关于mysql - 使用子查询和 rand() 进行随机采样会产生意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46459564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com