在两个表之间使用AVG()函数

use*_*666 1 sql oracle aggregate-functions

我有两张桌子,我需要确定能为所有职位提供最高平均工资的公司.我的表格如下:

employer
eID (primary key), eName, location

position
eID (primary key), pName (primary key), salary)
Run Code Online (Sandbox Code Playgroud)

我写的代码确定所有高于1的平均工资,但我需要找到最高的平均工资

到目前为止,这是我的代码:

SQL> select eName
  2  from Employer E inner join position P on E.eID = P.eID
  3  where salary > (select avg(salary) from position);
Run Code Online (Sandbox Code Playgroud)

这会输出高于最低平均值的所有工资,但我只需要最高的平均值.我尝试使用av​​g(薪水)>(从位置选择avg(薪水))但我收到了不允许组功能的错误.

任何帮助或建议将不胜感激!

OMG*_*ies 5

使用:

SELECT x.eid, 
       x.ename, 
       x.avg_salary 
 FROM (SELECT e.eid,
              e.ename,
              AVG(p.salary) AS avg_salary,
              ROWNUM
         FROM EMPLOYER e
         JOIN POSTITION p ON p.eid = e.eid
     GROUP BY e.eid, e.ename
     ORDER BY avg_salary) x
 WHERE x.rownum = 1
Run Code Online (Sandbox Code Playgroud)

Oracle 9i +:

SELECT x.eid, 
       x.ename, 
       x.avg_salary 
 FROM (SELECT e.eid,
              e.ename,
              AVG(p.salary) AS avg_salary,
              ROW_NUMBER() OVER(PARTITION BY e.eid
                                    ORDER BY AVG(p.salary) DESC) AS rank
         FROM EMPLOYER e
         JOIN POSTITION p ON p.eid = e.eid
     GROUP BY e.eid, e.ename) x
 WHERE x.rank = 1
Run Code Online (Sandbox Code Playgroud)

以前,因为问题被标记为"mysql":

  SELECT e.eid,
         e.ename,
         AVG(p.salary) AS avg_salary
    FROM EMPLOYER e
    JOIN POSTITION p ON p.eid = e.eid
GROUP BY e.eid, e.ename
ORDER BY avg_salary
   LIMIT 1
Run Code Online (Sandbox Code Playgroud)