【问题标题】:Find those companies whose employees earn a higher salary, on average, than the average salary at “Wipro”找出那些员工平均工资高于“Wipro”平均工资的公司
【发布时间】:2019-03-24 16:27:51
【问题描述】:

我已经尝试了一个 sql 但无法正常工作

select cname,avg(salary) from Company as co,Works as wo where co.cid=wo.cid and wo.salary > (select avg(salary) from Company as c,Works as w where c.cid=w.cid and c.cname='Wipro');

员工(EID、EName、城市)

作品(EID、CID、工资)

公司(CID、CName、城市)

创建表Employee(eid int primary key,ename varchar(6),city varchar(6))

创建表 Works(eid int,cid int primary key,salary int)

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

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

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    学习使用正确、明确、标准 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() 时,您应该有一个GROUP BY
    • 汇总值的条件应在HAVING 子句中。

    【讨论】:

      【解决方案2】:
      SELECT t1.CName, 
             t2.AvgSalary
      FROM Company t1
      INNER JOIN (SELECT AVG(Salary) AS AvgSalary, 
                  CID
                  FROM Works
                  GROUP BY CID) t2 ON t1.CID = t2.CID
      WHERE t2.AvgSalary > (SELECT AVG(Salary)
                            FROM blog.Works t1a
                            INNER JOIN blog.Company t2a ON t1a.cid = t2a.cid 
                            WHERE t2a.cname = 'Wipro');
      

      【讨论】:

        【解决方案3】:

        当有 GROUP BY 时,您可以在 HAVING 子句中使用聚合函数,如 SUM。

        SELECT 
        co.cname AS company_name, 
        AVG(wo.salary) AS avg_salary 
        FROM Company AS co 
        JOIN Works AS wo ON wo.cid = co.cid 
        GROUP BY co.cname 
        HAVING AVG(wo.salary) > (
               SELECT AVG(salary) 
               FROM Company AS c 
               JOIN Works AS w ON w.cid = c.cid 
               WHERE c.cname = 'Wipro'
              );
        

        你可以试试here

        【讨论】:

          猜你喜欢
          • 2020-08-09
          • 2019-01-25
          • 2011-04-28
          • 1970-01-01
          • 1970-01-01
          • 2019-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多