如何在另一个表中查找具有MAX值的行

时间:2018-04-07 06:25:17

标签: sql sql-server sql-server-2008 tsql

我需要帮助才能获得薪水最高的员工的姓名, 表: 员工(empid,empname) emp_salary(EMPID,薪水)

我需要从员工表中获取具有最高工资的empname,这是emp_salary。

我对在子查询中使用内部联接感到有点困惑,但不知道如何使用它来完成此任务。

到目前为止尝试了以下但没有得到结果:

select e.emp_name,MAX(es.salary) 
from employee e 
inner join emp_salary es on e.emp_id=es.emp_id 
group by es.salary

3 个答案:

答案 0 :(得分:2)

您可以使用TOP 1 - ORDER BY

SELECT TOP 1 e.*, es.salary       -- or TOP 1 WITH TIES
FROM employee e 
JOIN emp_salary es 
  ON e.emp_id=es.emp_id 
ORDER BY es.salary DESC

答案 1 :(得分:0)

尝试下面的方法

CREATE TABLE #TEMP
(
Id INT,
Salary DECIMAL(18, 2)
)

INSERT INTO #TEMP (Id, Salary) VALUES (1, 10000)
INSERT INTO #TEMP (Id, Salary) VALUES (2, 10000)
INSERT INTO #TEMP (Id, Salary) VALUES (3, 5000)

CREATE TABLE #TEMP_Employee
(
Id INT,
Name nvarchar(100)
)

INSERT INTO #TEMP_Employee (Id, Name) VALUES (1, 'X')
INSERT INTO #TEMP_Employee (Id, Name) VALUES (2, 'Y')
INSERT INTO #TEMP_Employee (Id, Name) VALUES (3, 'Z')

DECLARE @MaxSalary decimal(18, 2), @sql nvarchar(max)
SELECT @MaxSalary  = Max(Salary) FROM #TEMP

set @sql = 
'SELECT 
T.Id, TE.Name
FROM 
#Temp T
INNER JOIN #TEMP_Employee TE ON TE.Id = T.Id AND T.Salary ='+convert(nvarchar(20), @MaxSalary)+';'


exec (@sql)

答案 2 :(得分:0)

如果表格很大,下面的查询应该有助于提高性能,因为您不需要加入整个表格。它更像是一种寻求而不是扫描。

;with cte as
(
    SELECT ID,salary,DENSE_RANK() OVER (ORDER BY Salary deSC) AS DR   
    FROM EMPLOYEESALARY
)   
select TE.Name,C.Salary from CTE c
INNER JOIN EMPLOYEE TE ON C.Id = TE.Id
WHERE DR= 1