我已經編寫了一個查詢,該查詢的總結果集爲n%。我不確定這是否是一種有效的查詢方式。Oracle - 限制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
)
你有什麼建議從結果,可以採取第一/最後一個/隨機N%以有效的方式設置?
在Oracle中,你也可以使用'sample(20)'子句來獲得select語句的20%(隨機)行。 – 2014-09-21 06:54:10
它不會幫助OP,因爲他正在尋找一個有序的行。我在12c和之前的版本中是'NTILE'。在12c中,我們現在也有使用百分比的新「行限制子句」。 – 2014-09-21 07:57:17