从具有相同名称和不同薪水的重复记录中选择薪水最高的员工记录
id|name|salary
1 | A | 500
2 | B | 100
3 | A | 400
3 | B | 200
输出
1 | A | 500
3 | B | 200
请发布适用于所有数据库的通用sql。
我尝试过以下查询。但如果重复不存在,则不会返回记录。
select e.id,e.name,e.salary FROM employee e,
employee e1
WHERE
e.name = e1.name
AND e.salary > e1.salary
答案 0 :(得分:1)
任何合理的现代数据库(mysql都是值得注意的例外)应该支持窗口函数。 rank()
应该做到这一点:
SELECT id, name, salary
FROM (SELECT id, name, salary,
RANK() OVER (PARTITION BY name ORDER BY salary DESC) rk
FROM some_table) t
WHERE rk = 1
答案 1 :(得分:1)
在可行的SQL Server中(我目前没有其他SGDB,但它不应该很难适应它):
select s.*
from salaries s
join (
select name,MAX(salary) as maxsalary
from salaries
group by name) ms on s.name=ms.name and s.salary=ms.maxsalary
子查询选择代表最高工资的行。主查询根据两个参数进行过滤:名称和最高工资。
答案 2 :(得分:1)
使用NOT EXISTS
SELECT s1.id, s1.name, s1.salary
FROM salaries s1
WHERE NOT EXISTS
(
SELECT *
FROM salaries s2
WHERE s1.name = s2.name AND s1.salary < s2.salary
)
使用ALL
SELECT s1.id, s1.name, s1.salary
FROM salaries s1
WHERE s1.salary >=
ALL(
SELECT salary
FROM salaries s2
WHERE s1.name = s2.name
)