【问题标题】:How do I find the highest salary from each department using SUBQUERIES如何使用 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) 很抱歉,我已经重新编辑了这个问题。

标签: sql oracle subquery greatest-n-per-group


【解决方案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)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2015-11-20
  • 2022-01-07
  • 1970-01-01
  • 2019-08-08
  • 2019-10-03
相关资源
最近更新 更多