聚合基于当前行值和SQL的数据子集上的函数

时间:2010-05-15 00:55:02

标签: mysql subquery aggregate

希望这个标题有意义......

假设我有一张员工表:

ID | Name | Title   | Salary
----------------------------
1  | Bob  | Manager | 15285
2  | Joe  | Worker  | 10250
3  | Al   | Worker  | 11050
4  | Paul | Manager | 16025
5  | John | Worker  | 10450

我想做的是编写一个查询,根据员工头衔给出上表,以及平均工资列:

ID | Name | Title   | Salary | Pos Avg
--------------------------------------
1  | Bob  | Manager | 15285  | 15655
2  | Joe  | Worker  | 10250  | 10583
3  | Al   | Worker  | 11050  | 10583
4  | Paul | Manager | 16025  | 15655
5  | John | Worker  | 10450  | 10583

我尝试使用子查询执行此操作:

Select *, (select Avg(e2.salary) from employee e2 where e2.title = e.title) from employee e

但是我已经意识到首先执行了子查询,并且不知道表别名e

我确信我错过了一些非常明显的东西,有人能指出我的正确方向吗?

1 个答案:

答案 0 :(得分:3)

SELECT e.Id
     , e.Name
     , e.Title
     , e.Salary
     , g.PosAvg
  FROM employee e
     , (SELECT e.Title
             , avg(Salary) PosAvg
          FROM employee e
       GROUP BY e.Title) g
   WHERE e.Title = g.Title