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

Bac*_*ria 2 sql oracle aggregate-functions oracle11g

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

在此输入图像描述

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

预期输出将是:

在此输入图像描述

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

SELECT name,salary FROM  employee where salary
= (select max(salary) from employee);
Run Code Online (Sandbox Code Playgroud)

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

SELECT name,salary FROM  employee where salary
= (select min(salary) from employee);
Run Code Online (Sandbox Code Playgroud)

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

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

Tim*_*sen 5

这是一种方法,使用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;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

演示