如何编写 SQL 查询以在 Oracle 中查找最高和最低工资以及员工姓名

新手上路,请多包涵

我有一张员工表。请在下面的表格结构中找到数据。

在此处输入图像描述

我想找到最高工资和最低工资以及员工姓名。

预期输出将是:

在此处输入图像描述

为了找出最高工资以及员工姓名,我编写了以下查询:

 SELECT name,salary FROM  employee where salary
= (select max(salary) from employee);

为了找出最低工资和员工姓名,我写了这个查询:

 SELECT name,salary FROM  employee where salary
= (select min(salary) from employee);

但我无法合并这两个查询。

有人可以指导我构建将返回最高工资和最低工资以及员工姓名的 SQL 查询吗?

原文由 Bacteria 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

这是一种方法,使用 RANK 。这个答案在 CTE 中通过一次,以找到员工表中排名最低和最高的薪水。然后,它只进行一次子查询以检索完整的匹配记录。

 WITH cte AS (
    SELECT NAME, SALARY,
        RANK() OVER (ORDER BY SALARY) rnk_min,
        RANK() OVER (ORDER BY SALARY DESC) rnk_max
    FROM employee
)

SELECT NAME, SALARY
FROM cte
WHERE rnk_min = 1 OR rnk_max = 1
ORDER BY SALARY;

在此处输入图像描述

演示

原文由 Tim Biegeleisen 发布,翻译遵循 CC BY-SA 4.0 许可协议

用postgresql试过

select sub.emp_name, sub.salary
from (
select *,
dense_rank() over (order by salary) as my_rank,
dense_rank() over (order by salary desc) as my_rank_desc
from employee ) sub
where my_rank = 1 or my_rank_desc = 1
order by salary

原文由 Vijay Anand Pandian 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进