. Удивительно, имеет ли кто-то представление о нечетном поведении, которое я испытываю с помощью запроса Amazon Redshift, включающего несколько столбцов ROW_NUMBER() OVER (ORDER BY RANDOM())
в одном table (простой способ нарисовать несколько случайных выборок из таблицы).Amazon Redshift - SQL - поведение RANDOM() при вызове в нескольких случаях ROW_NUMBER() ORDER BY.
Минимальный рабочий пример: допустим, у меня есть стол data
с одной колонкой id
и 10 строк. Этот запрос:
SELECT id,
ROW_NUMBER() OVER (ORDER BY RANDOM()) AS rk1,
ROW_NUMBER() OVER (ORDER BY RANDOM()) AS rk2
FROM data ORDER BY rk1
всегда дает мне что-то вроде:
id rk1 rk2
5 1 1
3 2 2
7 3 3
10 4 4
6 5 5
8 6 6
1 7 7
9 8 8
2 9 9
4 10 10
, когда я бы ожидал что-то вроде:
id rk1 rk2
5 1 6
3 2 3
7 3 9
10 4 1
6 5 8
8 6 5
1 7 7
9 8 10
2 9 4
4 10 2
То есть, похоже, Redshift только вычисления RANDOM() один раз на каждой строке, несмотря на два вызова, поэтому заказы всегда одинаковы. Но это странно, потому что этот простой запрос:
SELECT RANDOM(), RANDOM()
возвращает что-то вроде:
random random
0.87943100551116793 0.23245479410162884
, как и ожидалось. Так что здесь происходит? Имеет ли это отношение к вызову RANDOM()
, находящемуся в функции окна?
Не очень важная проблема для моих нужд, поскольку я могу просто делать эти случайные ранги в отдельных запросах и присоединяться, но это было бы очень простым способом сделать это.
Не удалось найти что-либо на сайте, которое было похоже на это, хотя извинения, если оно уже было задано и адресовано. Благодаря!!
Это тоже работает! (Как и присоединение к двум экземплярам запроса.) Но мне все еще интересно, что ведет к оригинальному поведению. –