当前位置: 首页 > 知识库问答 >
问题:

SQL-Oracle-如何从联接结果中选择特定部门

穆仲卿
2023-03-14

你们能帮我解决这个问题吗?我想修改它,以便它只显示来自此查询(78%)的至少3名员工的部门,而不是来自(原始的员工/部门表)。每次我尝试“having COUNT(department_ID)或@the WHERE子句”都会给我一个错误。我需要做第二次连接吗?谢谢。

select *
from
(
 SELECT b.employee_id, b.employee_name,b.salary, a.department_id, 
 NVL(a.department_name, 'N/A') as dept_name,
 max(b.salary) over (partition by a.department_id) as max_sal
FROM        department a, employee b
WHERE       a.department_id(+) = b.department_id
) z
WHERE salary > (max_sal*.78 )
   7566 JONES                      3000            10 ACCOUNTING                 3000 
   7886 STEEL                      2500            10 ACCOUNTING                 3000 
   7944 LEE                        2400            20 RESEARCH                   3000 
   7999 WOLFE                      2500            20 RESEARCH                   3000 
   7610 WILSON                     3000            20 RESEARCH                   3000 
   7921 JACKSON                    2500            30 SALES                      3000 
   7900 FISHER                     3000            30 SALES                      3000 
   7788 SCOTT                      2500            40 IT                         2900 
   7910 SMITH                      2900            40 IT                         2900 
   7603 CLARK                      4000            50 EXECUTIVE                  5000 
   7596 JOST                       4500            50 EXECUTIVE                  5000 
   7839 KING                       5000            50 EXECUTIVE                  5000 
   8000 BREWSTER                   2500               N/A                        2500 
         This are RESULTS I need to get:

EMPLOYEE_ID EMPLOYEE_NAME工资DEPARTMENT_ID DEPT_NAME MAX_SAL

   7944 LEE                        2400            20 RESEARCH                   3000 
   7999 WOLFE                      2500            20 RESEARCH                   3000 
   7610 WILSON                     3000            20 RESEARCH                   3000 
   7603 CLARK                      4000            50 EXECUTIVE                  5000 
   7596 JOST                       4500            50 EXECUTIVE                  5000 
   7839 KING                       5000            50 EXECUTIVE                  5000 

选定6行

共有1个答案

卫诚
2023-03-14

您可以在另一个子查询中使用分析函数进行计算:

select de.*
from (select de.*, count(*) over (partition by department_id) as cnt
      from (SELECT e.employee_id, e.employee_name, d.salary, d.department_id, 
                   NVL(d.department_name, 'N/A') as dept_name,
                   max(e.salary) over (partition by d.department_id) as max_sal
            FROM department d JOIN
                 employee e
                 ON d.department_id = e.department_id
           ) de
      where salary > max_sal*.78
     ) de
where cnt >= 3;

外部连接似乎没有必要,所以我用内部连接和现代的join语法替换了它。我还将表别名改为表的缩写。它使代码更容易阅读。

 类似资料:
  • 我需要发票,invoice_details表的所有列,但我想从我的付款表中只得到一列(列名:)。我对它有什么疑问?这是我的控制器。

  • 我想从两个select查询的内部联接中选择两列。我编写了一个连接三个表的查询,从结果中我只希望得到两列。但是我的查询显示错误。我使用的是oracle sql Developer。 我只想要名字和姓氏,但我得到了这样的错误:

  • 问题内容: 我使用FULL OUTER JOIN联接了2个表,这花了6分钟来运行并给出输出。 我使用LEFT OUTER JOIN和RIGHT OUTER JOIN的UNION做了同样的事情。仅用了15秒 有人知道为什么会这样吗? 问题答案: 您可能在两个表中都有很多行,共有几行,并且所讨论的列上没有索引。

  • 问题内容: 我的问题是,有一些背景: 我必须基于表元数据(列格式)生成一些sql查询,其结果类似于: (是的,它是有序的。)我需要的是基于第一列来转置此数据,因此预期的输出将是: 是否可以使用Oracle SQL? 提前致谢! 问题答案: 如果要为每个调用生成查询或使用硬编码的max-column-count,则可以执行以下操作: 如果足够以这种形式获得它

  • 问题内容: 基本上,我有下表: 我需要在每个列中获得唯一的条目,如以下示例所示: 到目前为止,以下代码片段几乎提供了我想要的内容,但可能会返回一些值,这在当前列中不是唯一的: 也无济于事,因为它返回唯一的行,而不是其值 编辑: 选择顺序无关紧要 问题答案: 即使使用Dimitri提到的有问题的组合,这也对我有用。我不知道这对于大音量有多快 SQLFiddle当前不适用于我,这是我的测试脚本: 输出

  • 我使用两个SELECT语句创建以下两个临时表t1和t2: 和 两个SELECT语句本质上总是返回相同数量的行。现在,我想水平连接/组合这两个结果,以获得以下输出表: 我尝试使用多个JOIN语句,但可以找到一种聪明的方法。我还尝试了UNION语句,它提供了垂直连接,但没有提供所需的水平版本。 这里有两个简单的选择语句,用于更好地定位可能的解决方案: 提前感谢您的帮助。