편집 : 차이가있을 경우, 5.7.19를 사용하고 있습니다.subquery와 rand()를 사용하는 무작위 샘플링에서 예상치 못한 결과가 발생합니다.
테이블 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
--------------------------------------
이상하고 재현,하지만이 작동처럼 보일 않습니다. 각 테이블의 결과 중 각 테이블의 결과 중 약 10 % 만 가져오고 있지만 rand_value 열에 0.1보다 큰 값이 표시되는 이유를 모르겠습니다. 'SELECT * 이후의 서브 쿼리와 관련이 없으며, rand_value
Devon
귀하의 질의에는 상관 하위 쿼리, 단순히 '파생 테이블' –
ps가 포함되어 있지 않습니다. https://en.wikipedia.org/wiki/Correlated_subquery –