【问题标题】:How to Find Row with MAX value in another table如何在另一个表中查找具有 MAX 值的行
【发布时间】:2018-04-07 06:25:17
【问题描述】:

我需要帮助以获取最高薪水员工的姓名, 表: 雇员 (empid,empname) emp_salary(empid,salary)

我需要从emp_salary中获得最高薪水的员工表中获取empname。

我对在子查询上使用内连接有点困惑,但不知道如何使用它来完成此操作。

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

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

【问题讨论】:

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


    【解决方案1】:

    你可以使用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
    

    【讨论】:

      【解决方案2】:

      尝试以下方法

      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)
      

      【讨论】:

        【解决方案3】:

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

        ;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
        

        【讨论】:

          猜你喜欢
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-27
          • 2019-11-13
          • 1970-01-01
          • 2021-08-16
          • 2016-06-04
          相关资源
          最近更新 更多