小编JZa*_*Zal的帖子

新手问题:结果问题,sql,join,where,"<"运算符

任务:

显示员工的姓氏,员工薪水及其经理的姓氏和薪水.我们只对那些在经理之前被雇用并且薪水低于其部门平均水平的员工感兴趣.

码:

select e.last_name, e.salary, e.hire_date, e.department_id,
       m.last_name, m.salary, m.hire_date 
from employees e  
join employees m  on (e.manager_id=m.employee_id) 
 where e.salary <(select avg(e.salary) 
                  from employees e  
                  where e.department_id=e.department_id) 
and e.hire_date < m.hire_date
Run Code Online (Sandbox Code Playgroud)

问题:

我的结果有问题.其中我得到了

  • 一名员工的薪水等于部门平均水平(Rajs)
  • 一个没有department_id的员工(Grant)
  • 一名在单人部门工作的员工(Whalen).

但是,当我将<操作员e.salary < (select avg(e.salary)...改为相反时>(假设这次我们对那些工资高于部门平均水平的人感兴趣),结果是正确的.

我无法理解为什么它以这种方式工作?我试图通过添加此行来解决此问题

 and e.salary<>(select avg(e.salary) 
               from employees e 
               where e.department_id=e.department_id)`
Run Code Online (Sandbox Code Playgroud)

但它不起作用.任何人都可以帮助我了解正在发生的事情或只是显示方向吗?

这是我的表: 在此输入图像描述

sql oracle subquery where

5
推荐指数
1
解决办法
70
查看次数

标签 统计

oracle ×1

sql ×1

subquery ×1

where ×1