Я написал запрос, который дает n% из общего набора результатов. Я не уверен, является ли это эффективным способом запроса.Oracle - Limit Row_number() в процентах
Ниже мой запрос (его модифицированный один для понимания), который дает 20% от общего набора результатов:
SELECT *
FROM (
WITH RS AS (
SELECT ID
,ROW_NUMBER() OVER (
ORDER BY ID
) r_num
,count(1) OVER() AS n_rows
FROM TAB1
LEFT OUTER JOIN TAB2 ON TAB1.ID = TAB2.ID
INNER JOIN TAB4 ON TAB4.ID = TAB4.ID
INNER JOIN TAB3 ON TAB3.ID = TAB4.ID
WHERE TAB2.ID_ IS NULL
AND TAB3.C_ID = 'JP'
)
SELECT *
FROM RS
WHERE r_num <= round(n_rows * 0.2)
ORDER BY ID
)
Есть ли у вас какие-либо предложения, чтобы принять первый/последний/случайный п% от результата эффективно?
В Oracle вы также можете использовать предложение 'sample (20)', чтобы получить 20% (случайные) строки оператора select. –
Это не поможет ОП, так как он ищет упорядоченные строки. Мой прием - «NTILE» в 12c и предыдущих выпусках. В 12c теперь у нас есть новая строка ограничения строки, используя процент. –