Есть запрос
WITH RECURSIVE
r AS (
SELECT array[]::bigint[] AS res,min(id) AS min, max(id)-min(id) AS range FROM items
UNION ALL
SELECT res||ARRAY(SELECT id FROM items WHERE id IN (SELECT (min+range*random())::int FROM generate_series(1,${custom.numRows})) AND NOT id=ANY(res)), min, range
FROM r
WHERE
coalesce(array_length(res,1),0)<${custom.numRows}
)
SELECT * FROM (
SELECT res FROM r ORDER BY array_length(res,1) DESC NULLS LAST LIMIT 1
) AS t LIMIT ${custom.numRows};
custom.numRows = 1 - Количество строк.
В результате я получаю значения id в массиве. В зависимости от количества строк их может быть несколько.
{ res: [ '4146' ] }
Как мне получать не просто значения id, а все данные строки?
Пробовал
WITH RECURSIVE
r AS (
SELECT array[]::bigint[] AS res,min(id) AS min, max(id)-min(id) AS range FROM items
UNION ALL
SELECT res||ARRAY(SELECT id FROM items WHERE id IN (SELECT (min+range*random())::int FROM generate_series(1,${custom.numRows})) AND NOT id=ANY(res)), min, range
FROM r
WHERE
coalesce(array_length(res,1),0)<${custom.numRows}
)
SELECT * FROM items WHERE id IN (
SELECT res FROM r ORDER BY array_length(res,1) DESC NULLS LAST LIMIT 1
) LIMIT ${custom.numRows}
В ответ получаю ошибку
error: operator does not exist: bigint = bigint[].
Еще вопрос:
Как добавить условие для выборки?
Например в таблице items есть столбец cost. Как указать чтобы его значение было > 1000?