你们能帮我解决这个问题吗?我想修改它,以便它只显示来自此查询(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行
您可以在另一个子查询中使用分析函数进行计算:
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语句,它提供了垂直连接,但没有提供所需的水平版本。 这里有两个简单的选择语句,用于更好地定位可能的解决方案: 提前感谢您的帮助。