Given employee table in scott user, how will I find the first 5 highest salaried employees in each dept.?
Assuming this is SQL/Server 7, use the SELECT TOP option to select the top 5 in each department in a correlated subselect --
select * from scott.employee X where salary in (select top 5 salary from scott.employee where dept = X.dept order by salary desc) order by dept, salary desc
Sorry, I'm not 100% sure this will work because I do not have access to SQL/Server to test this. I'm not certain the syntax for referring to scott's employee table is correct.
Note that the ORDER BY in the subselect is descending, so that the TOP function will pick the five highest salaries. The ORDER BY in the outer query sorts the results by highest salaries within department.
By the way, both I and Craig Mullins, another of searchDatabase.com's database experts, have written web page articles which discuss the "Top Ten" problem --
The "Top Ten" Problem by Craig S. Mullins
Top Ten SQL by r937
Mine's a little older and does not discuss SELECT TOP.
For More Information
- What do you think about this answer? E-mail us at editor@searchDatabase.com with your feedback.
- The Best Microsoft SQL Server Web Links: tips, tutorials, scripts, and more.
- The Best SQL Web Links
- Have a SQL tip to offer your fellow DBA's and developers? The best tips submitted will receive a cool prize--submit your tip today!
- Ask your technical SQL questions--or help out your peers by answering them--in our live discussion forums.
- Ask the Experts yourself: Our SQL guru is waiting to answer your technical questions.
This was first published in May 2001