Использование функции AVG () между двумя таблицами - PullRequest
1 голос
/ 05 октября 2010

У меня есть две таблицы, и мне нужно определить компанию, которая предлагает самую высокую среднюю зарплату для любой должности.Мои таблицы таковы:

employer
eID (primary key), eName, location

position
eID (primary key), pName (primary key), salary)

Код, который я написал, определяет все средние зарплаты, превышающие единицу, но мне нужно найти только самую высокую среднюю зарплату за все

Вот мойпока код:

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

Это выводит все зарплаты, которые выше, чем самый низкий средний, но мне нужен только самый высокий средний.Я попытался использовать avg (зарплата)> (выберите avg (зарплата) из позиции), но получил сообщение об ошибке, что групповая функция не разрешена.

Любая помощь или предложения будут с благодарностью!

Ответы [ 2 ]

5 голосов
/ 05 октября 2010

Использование:

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

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

Ранее, потому что вопрос был помечен как "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
0 голосов
/ 08 октября 2010
select a.eid,
       a.ename,
       b.avg_salary
FROM EMPLOYER a
JOIN POSTITION b ON a.eid = b.eid
WHERE b.avg_salary =(SELECT max(x.avg_salary)
                      FROM (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) x
                    ) y
...