我需要帮助才能获得薪水最高的员工的姓名, 表: 员工(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
答案 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