當使用ROWNUM對結果集進行排序時,可能會出現重復的值。這是因為ROWNUM是在查詢結果返回后才進行計算的,所以在排序之前無法確定每個行的ROWNUM值。為了解決這個問題,可以使用子查詢。
例如,假設有一個表名為"employees",有一個列名為"salary",你想對工資進行排序并獲取前10名員工:
SELECT * FROM (SELECT * FROM employees ORDER BY salary DESC
) WHERE ROWNUM <= 10;
這個查詢先對工資進行降序排序,然后將結果作為子查詢,再使用ROWNUM進行篩選。這樣可以確保排序后的結果正確,并且可以獲取到前10名員工的數據。
需要注意的是,如果希望獲取不重復的結果,可以使用DISTINCT關鍵字。例如:
SELECT DISTINCT salary FROM (SELECT * FROM employees ORDER BY salary DESC
) WHERE ROWNUM <= 10;
這樣可以確保結果中只有不重復的工資值。