Emp_id Emp_Name Dept_ID Dept_Name salary
1 a AA IT 2000 100
2 b AA IT 3000 200
3 c AA IT 4000 300
4 d BB HR 1000 400
5 e BB HR 2000 500
6 f BB HR 3000 600
7 g BB HR 4000 700
8 h CC FI 2500 800
9 i CC FI 3500 900
这是我的表结构。我想找出emp_id
& dept_id
,其薪水高于其组中的平均工资。我尝试过SQL查询,但显示错误
select Emp_id
from dbo.Sheet1$
where Salary >= (select AVG(Salary) from dbo.Sheet1$ group by Dept_ID)
答案 0 :(得分:2)
试试这个,
SELECT Emp_id
FROM dbo.Sheet1$ A
where A.Salary >= (SELECT AVG(B.Salary) FROM dbo.Sheet1$ B WHERE B.Dept_ID=A.Dept_ID)
答案 1 :(得分:1)
也许是这样的:
;WITH CTE
AS
(
SELECT
tbl.Emp_id,
AVG(salary) OVER(PARTITION BY tbl.Dept_ID) AS avgSalery
FROM
dbo.Sheet1$ AS tbl
)
SELECT
*
FROM
dbo.Sheet1$ AS tbl
JOIN CTE
ON CTE.Emp_id=tbl.Emp_id
AND tbl.salary>=CTE.avgSalery
答案 2 :(得分:0)
没有错误消息很难,但有一件事我可以告诉你:你的第二个选择,AVG被分组,所以它可以返回多个值,所以>不是有效的运营商。
答案 3 :(得分:0)
select Emp_id,Dept_ID from (
select Emp_id, Emp_Name,
avg(salary) over (partition by dept_id) avg_sal
from yourtable
) a
where salary > avg_sal