我需要找到每个部门中薪水最高的人员。我已经有了代码,找出了每个部门最高薪水的人。但是,当我查看数据时,同一部门中还有另一个人具有相同的最大值。有没有办法返回两个人的名字?
示例表:
Department Salary Name
Admin $1000 Amy
Admin $900 Ben
HR $1500 Cassy
HR $1500 Dan
我尝试了以下代码:
SELECT department, Max(salary), name
FROM table
GROUP BY department
ORDER BY salary desc;
我已经确定了管理员的详细信息。但是HR我只能得到Cassy的名字。有没有办法在我的输出中获得Dan的名字?谁能给我一个例子吗?谢谢
答案 0 :(得分:3)
希望这可以帮助
SELECT department, salary, name
FROM table t
where salary= (select max(salary) from table where t.department = department)
答案 1 :(得分:2)
您没有提到正在使用的DBMS。
通过标准SQL,您可以为此使用窗口函数(所有现代DBMS都支持):
<div id="dropzone" class="dropzone" profil="1">
<div class="dz-default dz-message"></div>
</div>
答案 2 :(得分:2)
不存在:
SELECT department, salary, name
FROM tablename t
WHERE NOT EXISTS (
SELECT 1 FROM tablename
WHERE department = t.department and salary > t.salary
)
ORDER BY salary desc, name;
请参见demo。
结果:
| Department | Salary | Name |
| ---------- | ------ | ----- |
| HR | 1500 | Cassy |
| HR | 1500 | Dan |
| Admin | 1000 | Amy |
答案 3 :(得分:0)
如果要每个部门在行中列出名称,则可以使用两种聚合级别:
select dept, salary, names
from (select dept, salary, group_concat(name) as names,
row_number() over (partition by dept order by salary desc) as seqnum
from example
group by dept, salary
) t
where seqnum = 1;