如果两行相等,则如何返回两个值?

时间:2019-08-13 07:17:55

标签: sql sqlite

我需要找到每个部门中薪水最高的人员。我已经有了代码,找出了每个部门最高薪水的人。但是,当我查看数据时,同一部门中还有另一个人具有相同的最大值。有没有办法返回两个人的名字?

示例表:

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的名字?谁能给我一个例子吗?谢谢

4 个答案:

答案 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;