输入:
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
提前致谢
答案 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
(虽然对于相同年龄的员工,不会为同一薪水返回多行。)