如何使用 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 关系(我称之为 employees
和 salaries
):如果是这样,则应将两个表合并到一个表中。
【讨论】:
是的,但是没有连接怎么样,所以你使用 WHERE Emp_id IN (SELECT Emp_id FROM DEPT)以上是关于如何使用 SUBQUERIES 找到每个部门的最高薪水的主要内容,如果未能解决你的问题,请参考以下文章
MySQL:我检索了按部门排序的最高工资列表。如何找到这些最高工资中的最小值?