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

找到那些员工平均工资高于“威普罗”平均工资的公司。

洪念
2023-03-14

我尝试了一个sql但不起作用

选择cname,avg(salary)from Company as co,Works as wo,其中co.CID=wo.CID and wo.salary>(选择avg(salary)from Company as c,Works as w,其中c.CID=w.CID and c.cname='WIPRO');

员工(EID,EName,城市)

工时(EID、CID、工资)

公司(CID、CName、城市)

创建表Employee(eid int主键,ename varchar(6),city varchar(6))

创建表工时(eid int,cid int主键,salary int)

创建表Company(cid int,cname varchar(6),city varchar(6))

alter table Works添加外键(eid)引用员工(eid)

alter table Works添加外键(cid)引用公司(cid)

共有2个答案

戚阳
2023-03-14

试试看:

Select cname
FROM
(select cname,cid,avg(salary) as avg_sal
from works w 
join company c
on w.cid = c.cid
group by w.cid,w.cname
)a,
(
select avg(salary) as avg_wipro
from works w
join company c
on w.cid = c.cid
and ccname='Wipro'
)b
WHERE a.avg_sal > b.avg_wipro
融宏伟
2023-03-14

学习使用正确的、明确的、标准的join语法。

话虽这么说,你已经很接近了。您只需要一个having子句:

select c.cname, avg(w.salary)
from Company c join
     Works w
     on c.cid = w.cid 
group by c.cname
having avg(w.salary) > (select avg(w2.salary)
                        from Company c2 join
                             Works w2
                             on c2.cid = w2.cid 
                        where c2.cname = 'Wipro'
                       );

备注:

  • 切勿在from子句中使用逗号。
  • 使用AVG()时,应具有分组依据
  • 汇总值的条件应在having子句中。
 类似资料:
  • 问题内容: 我需要获得fname,lname,比平均工资低400.00美元的员工薪水,即使在加薪10%之后。 我能够使薪水低于平均薪水的员工,但不确定如何使加薪后的薪水低于400美元的员工。 我正在使用MySQL。谢谢你。 这给了我工资低于平均工资的员工: 我当时在想这样的事情,但这是行不通的。未知专栏新闻: 问题答案: 您有一个正确的想法,就是不能在这样的子句中使用别名。只需直接使用公式,就可以

  • 有两张桌子: 问题是如何找到哪个经理支付给他的员工的平均工资(+奖金)最高?

  • 我怎样才能得到公司员工的平均工资,他们的工资超过了工资限制?我想首先我需要得到一个所有薪水的列表,并使用mapToInt和average进行筛选,但是。。。什么都不管用(( }

  • 问题内容: 我正在写一个查询,以查找收入高于其部门平均工资的员工。我需要显示员工ID,薪水,部门ID和该部门的平均工资。 我有一个几乎可以正常使用的查询,但它一直显示“ ORA-00904:“ AVG_SAL”:无效标识符”错误。我正确地做到了吗?为什么会出现此无效的标识符错误? 问题答案: 我不相信您可以在WHERE子句中引用列别名(在这种情况下为avg_sal)。 您需要重复该内部查询,即:

  • 员工属于一个部门(外键=D_ID)。员工有一个SSN(主键)、姓名、工资和D_ID。

  • 问题内容: 不太确定如何获得这个。我有一个职员表,我需要找到平均工资。我知道我可以使用use 。但是,诀窍是我需要找到拥有5名以上职员的部门的平均值。我不确定是否应使用分组依据或使用方式。谢谢! 问题答案: