Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 部门名称(含员工姓名),员工人数超过2人,工资高于各部门平均工资的90%_Sql_Oracle - Fatal编程技术网

Sql 部门名称(含员工姓名),员工人数超过2人,工资高于各部门平均工资的90%

Sql 部门名称(含员工姓名),员工人数超过2人,工资高于各部门平均工资的90%,sql,oracle,Sql,Oracle,我正在尝试生成一个SQL查询,以查找具有员工姓名的部门名称,其中有两名以上的员工的工资高于各自部门平均工资的90%。我的SQL代码工作正常,没有语法错误,但是输出给了我额外的数据。这张桌子是福洛斯的 JONES ACCOUNTING 3000 STEEL ACCOUNTING 2500 WILSON RESEARCH 3000 WOLFE RESEARCH 2500 LEE RESE

我正在尝试生成一个SQL查询,以查找具有员工姓名的部门名称,其中有两名以上的员工的工资高于各自部门平均工资的90%。我的SQL代码工作正常,没有语法错误,但是输出给了我额外的数据。这张桌子是福洛斯的

JONES ACCOUNTING 3000 STEEL ACCOUNTING 2500 WILSON RESEARCH 3000 WOLFE RESEARCH 2500 LEE RESEARCH 2400 LANCASTER SALES 2000 JACKSON SALES 2500 FISHER SALES 3000 ADAMS IT 2000 MILLER IT 1000 SCOTT IT 2500 SMITH IT 2900 KING EXECUTIVE 5000 JOST EXECUTIVE 4500 CLARK EXECUTIVE 4000
我注意到,我的代码返回的部门值超过2名员工,并且工资>部门平均工资的90%。鉴于我正在寻找两名以上员工的部门,其工资超过部门平均工资的90%

我认为这应该做到:

select *
from (
  select department_name, 
         employee_name,
         sum(case when salary > avg_dept_sal * 0.9 then 1 else 0 end) over (partition by department_id) as greater_count
  from (
     select d.department_name,
            e.department_id,
            e.employee_name,
            e.salary,
            count(*) over (partition by e.department_id) as dept_count,
            avg(salary) over (partition by e.department_id) as avg_dept_sal
     from employee e
       join department d on e.department_id = d.department_id
  ) t1
) t2
where greater_count  >= 2

这将返回这些部门的所有员工。如果您只想看到那些工资实际高于90%的员工,则需要在外部where子句中添加另一个条件以仅选择这些员工。

我认为这样做应该:

select *
from (
  select department_name, 
         employee_name,
         sum(case when salary > avg_dept_sal * 0.9 then 1 else 0 end) over (partition by department_id) as greater_count
  from (
     select d.department_name,
            e.department_id,
            e.employee_name,
            e.salary,
            count(*) over (partition by e.department_id) as dept_count,
            avg(salary) over (partition by e.department_id) as avg_dept_sal
     from employee e
       join department d on e.department_id = d.department_id
  ) t1
) t2
where greater_count  >= 2

这将返回这些部门的所有员工。如果您只想查看工资实际高于90%的员工,则需要在外部where子句中添加另一个条件,以便仅选择这些员工。

下面的查询将根据需要给出结果,而不使用任何分析。就像英语一样简单

**

* 使用T作为选择empname、deptno、来自员工e1的工资,其中 工资>从员工e2中选择平均工资*0.9,其中 e2.deptno=e1.deptno按countempname>2的deptno分组选择 T.empname,部门名称,来自T的工资,所在部门 T.deptno=department.deptno; *

**


我在Oracle数据库上成功执行了此查询。

下面的查询将根据需要给出结果,而不使用任何分析。就像英语一样简单

**

* 使用T作为选择empname、deptno、来自员工e1的工资,其中 工资>从员工e2中选择平均工资*0.9,其中 e2.deptno=e1.deptno按countempname>2的deptno分组选择 T.empname,部门名称,来自T的工资,所在部门 T.deptno=department.deptno; *

**


我在Oracle数据库上成功执行了此查询。

是否区分大小写?您是否需要E以外的别名来区别于E?它不区分大小写。我的输出应该只给我2个部门,在这个阶段给我4个。是否区分大小写?您是否需要E以外的别名来区别于E?它不区分大小写。我的输出应该只给我2个部门,在这个阶段给我4个。@Gary1266:请参阅我的编辑。顺便说一句,如果这是家庭作业,那么请告诉我们。这是标准txtbook中每一章末尾给出的练习,但由于我刚刚开始编写SQL代码,我有点挣扎。这个问题的结果如下:谢谢你的研究help@Gary1266:查看我的编辑。顺便说一句,如果这是家庭作业,那么请告诉我们。这是标准txtbook中每一章末尾给出的练习,但由于我刚刚开始编写SQL代码,我有点挣扎。这个问题的结果如下:谢谢你的帮助