查询以按年龄显示最高的员工工资

时间:2012-03-13 15:11:42

标签: sql

你能帮帮我吗?需要按年龄,名字和姓氏获取员工最高薪水清单

输入:

Age        FirstName     LastName      SAL     
---------- ----------    ----------  ----------
30         Andy          Donald        175     
31         Petr          Pess          295     
30         John          Jacky         453     
31         Bob           Bobby         385     
29         Eric          Rice          957

答案应该是

Age        FirstName     LastName      SAL     
---------- ----------    ----------  ----------
31         Bob           Bobby         385     
30         John          Jacky         453     
29         Eric          Rice          957     

提前致谢

3 个答案:

答案 0 :(得分:3)

让没有员工年龄相同且薪水较高的所有员工:

SELECT *
FROM employees e1
WHERE NOT EXISTS (
  SELECT 1 
  FROM employees e2
  WHERE e1.age = e2.age
  AND e1.sal < e2.sal
)
ORDER BY age DESC

如果两名员工的年龄相同,则两者都将被退回...此查询将适用于任何数据库

答案 1 :(得分:3)

如果您有可用的窗口/分析功能(您未在OP中提及RDBMS),则可以执行以下操作:

SELECT * FROM (
    SELECT Age, FirstName, LastName, SAL
         , DENSE_RANK() OVER (PARTITION BY Age ORDER BY SAL DESC) AS ranknum
      FROM employees
) WHERE ranknum = 1

即使两个或更多同龄的员工有相同的工资,这也会有效 - 两者都会被退回。它还允许您获得第二高薪等,如果您愿意(只需将ranknum = 1更改为ranknum = 2等)。

编辑:仅供参考,这至少可以在Oracle,SQL Server和PostgreSQL中使用。

答案 2 :(得分:0)

如果您使用的是MySQL,则以下内容应该有效:

select * from
(select * from myTable order by age desc, sal desc) sq
group by age

(虽然对于相同年龄的员工,不会为同一薪水返回多行。)