Один из вариантов - использовать ROW_NUMBER
:
SELECT Emp_IDs, Emp_Name, Sale_Num, Sale_Date, Commission
FROM
(
SELECT Emp_IDs, Emp_Name, Sale_Num, Sale_Date, Commission,
ROW_NUMBER() OVER (ORDER BY Commission DESC) rn
FROM Employee_Details ed
INNER JOIN Sales_Comm sc
ON ed.Emp_ID = sc.Sale_Num
INNER JOIN Sales s
ON sc.Sale_Num = s.Sale_No
)
WHERE rn <= 5;
Обратите внимание, что я обновил ваш запрос, чтобы использовать современный явный синтаксис объединения, который в настоящее время является предпочтительным способом написания SQL.
Хотя FETCH FIRST
может работать быстрее, чем указано выше, при условии, что ваша версия Oracle поддерживает его, приведенный выше код имеет одно возможное преимущество.Если вы когда-либо решили реорганизовать запрос и использовать другую метрику, вам понадобится лишь очень небольшое изменение.Например, если вы хотите сохранить 5 лучших рейтинговых комиссий, вам нужно будет поменять ROW_NUMBER
на RANK
(или, может быть, DENSE_RANK
).