Qin*_*tor 22 sql t-sql sql-server
我有一张桌子EmpDetails:
DeptID EmpName Salary
Engg Sam 1000
Engg Smith 2000
HR Denis 1500
HR Danny 3000
IT David 2000
IT John 3000
Run Code Online (Sandbox Code Playgroud)
我需要进行查询,找出每个部门的最高薪水.
AVe*_*Vee 32
简短的问题:
SELECT DeptID, MAX(Salary) FROM EmpDetails GROUP BY DeptID
Run Code Online (Sandbox Code Playgroud)
Joe*_*lli 21
假设SQL Server 2005+
WITH cteRowNum AS (
SELECT DeptID, EmpName, Salary,
DENSE_RANK() OVER(PARTITION BY DeptID ORDER BY Salary DESC) AS RowNum
FROM EmpDetails
)
SELECT DeptID, EmpName, Salary
FROM cteRowNum
WHERE RowNum = 1;
Run Code Online (Sandbox Code Playgroud)
如果你也想显示其他参数DeptId和Salary喜欢EmpName,EmpId
SELECT
EmpID
, Name,
, Salary
, DeptId
FROM Employee
where
(DeptId,Salary)
in
(select DeptId, max(salary) from Employee group by DeptId)
Run Code Online (Sandbox Code Playgroud)
小智 6
SELECT empName,empDept,EmpSalary
FROM Employee
WHERE empSalary IN
(SELECT max(empSalary) AS salary
From Employee
GROUP BY EmpDept)
Run Code Online (Sandbox Code Playgroud)
如果部门、工资和员工姓名在同一个表中,则此方法有效。
select ed.emp_name, ed.salary, ed.dept from
(select max(salary) maxSal, dept from emp_dept group by dept) maxsaldept
inner join emp_dept ed
on ed.dept = maxsaldept.dept and ed.salary = maxsaldept.maxSal
Run Code Online (Sandbox Code Playgroud)
还有比这更好的解决方案吗?
小智 5
Select empname,empid,Sal,DeptName from
(Select e.empname,e.empid,Max(S.Salary) Sal,D.DeptName, ROW_NUMBER() Over(partition by D.DeptName order by s.salary desc) Rownum
from emp e inner join Sal S
on e.empid=s.empid
inner join Dept d on e.Deptid=d.Deptid
group by e.empname,e.empid,D.DeptName,s.Salary
) x where Rownum = 1
Run Code Online (Sandbox Code Playgroud)