编辑:如果有任何区别,我正在使用mysql 5.7.19。
我有一个表A,并且正在尝试平均随机采样行的10%。我已经决定在子查询中使用rand(),然后在随机结果上过滤会解决问题,但它给出了意外的结果。当我在过滤后打印出随机生成的值时,我会得到与主查询的" where"子句匹配的随机值,因此我想它正在再生外部选择中的随机值。
。我想我错过了与子征服有关的事情以及何时执行事情,但是我真的不确定发生了什么。
谁能解释我可能做错了什么?我已经查看了这篇文章:SQL引擎执行的查询和子查询是哪个序列?,我的子查询是相关的,所以我认为我的子查询是先执行的,然后主要查询正在从中过滤。鉴于我的假设,我不明白结果为什么具有应该被过滤的值。
查询:
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
--------------------------------------
我无法使用此sql小提琴来复制该链接,然后单击蓝色[run 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 |