如何使用 SUBQUERIES 找到每个部门的最高薪水

Posted

技术标签:

【中文标题】如何使用 SUBQUERIES 找到每个部门的最高薪水【英文标题】:How do I find the highest salary from each department using SUBQUERIES 【发布时间】:2021-03-04 04:19:21 【问题描述】:

我对此真的很陌生,这个特殊的问题已经困扰我好几天了。我知道有类似的问题,但我一直想知道如何在子查询中完成。

工资表 [Emp_ID] [SalaryPM] 001 | 10,500 002 | 50,000 003 | 8,000 004 | 10,000

DEPT TABLE

[Emp_ID] [Dept_ID] 001 |一种 002 |乙 003 | C 004 | C

我希望它看起来像这样

[Emp_ID] [Dept_ID] [SalaryPM] 001 |一个 | 10,000 002 |乙| 50,000 004 | C | 10,000

到目前为止我已经尝试过,但它只给出了员工的最高薪水##

从部门选择 * EMP_ID 在哪里 (选择 Emp_ID 从工资 WHERE SalaryPM = (SELECT MAX(SalaryPM) 从薪水));

【问题讨论】:

你为什么要专门用子查询来做这件事?这显然不是最好的方法。 没有尝试任何东西,当然它已经困扰你好几天了。至少尝试一下。 我想在不使用 JOINS (GMB) 的情况下从两个表中检索数据 (ERIC) 很抱歉,我已经重新编辑了这个问题。 【参考方案1】:

我很想知道“使用子查询”是什么意思;)

这是在 SELECT 子句中使用子查询的另一种解决方案

SELECT
    d.id,
    d.deptid,
    (
        SELECT
            MAX(s.salary)
        FROM
            my_salaries s
        WHERE
            s.id = d.id
    ) max_salary
FROM
    my_departments d;

这是不加入表格的解决方案(恕我直言,不加入表格只是过于复杂了)。为什么“不使用 join”对您来说如此重要?

SELECT
    sub.id,
    MAX(sub.deptid),
    MAX(sub.salary)
FROM
    (
        SELECT
            d.id,
            d.deptid,
            NULL salary
        FROM
            my_departments d
        UNION ALL
        SELECT
            s.id,
            NULL deptid,
            s.salary
        FROM
            my_salaries s
    ) sub
GROUP BY
    sub.id
ORDER BY
    sub.id;

【讨论】:

不使用join语句 我想知道 (my_) 是做什么用的。谢谢 @chirx - 当然,我的架构上已经有名为薪水和部门的表,所以我刚刚创建了带有 my_ 前缀的新表 @chirx 顺便说一句。我为我的答案添加了另一个解决方案【参考方案2】:

这是否符合子查询解决方案的条件?

select *
from (
    select s.*, e.deptid, 
        rank() over(partition by e.dept order by s.salaries desc) rn
    from employees e
    inner join salaries s on s.id = e.id
) rn
where rn = 1

注意:你的看起来不太好。您显示的数据表明两个表之间存在 1-1 关系(我称之为 employeessalaries):如果是这样,则应将两个表合并到一个表中。

【讨论】:

是的,但是没有连接怎么样,所以你使用 WHERE Emp_id IN (SELECT Emp_id FROM DEPT)

以上是关于如何使用 SUBQUERIES 找到每个部门的最高薪水的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:我检索了按部门排序的最高工资列表。如何找到这些最高工资中的最小值?

文巾解题 184. 部门工资最高的员工

用oracle怎样查询每个部门的部门编号,部门名称,平均工资,最高工资和最低工资

查找每个部门的最高薪水 - 是不是有更有效的查询?

找到总工资最高的部门的最佳方法 Postgresql

如何找到使用 MapReduce 获得最高销售额的一周?