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;
これによって、結果に重複しない給与額のみが含まれることが保証されます。