我正在尝试获得一个sqlplus表格,以便为每个公司的员工提供超过该公司平均薪水的工资。
(例如,First National Bank的平均工资是50,000美元.James和Jane在那里工作赚80,000美元,Billy赚了40,000美元.Fredco的平均工资是30,000美元。员工Mark赚了35,000美元,Timmy有25,000美元的工资.James,Jane和Mark's结果给出了名字。)
然而,我在太阳下遇到的每一个错误都试图让它正确运行。任何帮助或提示都将非常感激。
这是表格创建的代码。 (忽略外键引用:链接到没有此查询所需的任何数据的其他表。)
create table works
(employee_name varchar(20) PRIMARY KEY,
company_name varchar(30) NOT NULL,
salary numeric(9, 2) NOT NULL,
foreign key (employee_name) references employee,
foreign key (company_name) references company);
这就是我所拥有的。截至目前,错误ORA-01427是响应。 (单行子查询返回多行。)
select employee_name
from works
where salary > (select avg(salary)
from works
group by company_name);
提前感谢您提供任何提示或帮助。
答案 0 :(得分:0)
使用以下查询:
select w.employee_name from works w
join (select company_name,avg(salary) salary
from works
group by company_name) q on w.company_name=q.company_name and w.salary > q.salary;
答案 1 :(得分:0)
如下:
select employee_name
from (select employee_name, salary, avg(salary) over (partition by company_name) avg_co_salary
from works)
where salary > avg_co_salary;
它可能比通过工作表进行两次传递更快,但是再次,也许不是 - 这完全取决于您的数据,索引等。您必须进行测试。