Oracle の ROWNUM でソートする際に重複値がある場合、どう対処すればよいですか?

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;


これによって、結果に重複しない給与額のみが含まれることが保証されます。

bannerAds