如何在 SQL 和 LINQ 中获取每个员工的第二高工资值


I have below SalaryTable.

----------------
EmpId   Salary  
----------------
1       100     
2       200     
3       300
1       400
2       500
3       600
1       700
2       800
3       900
1       1000
2       1100
3       1200
----------------

示例输出

-------------------
EmpId       Salary
-------------------
1            700  
2            800 
3            900
-------------------

例如:

All the salary of Employee ID 1 [100,400,700,1000] and 700 is second largest salary of employee 1 

像智慧一样展示所有员工。 我想在 SQL 和 LINQ 查询中显示每个员工第二高薪的员工。

在 Linq 中尝试此操作以了解详细信息

var results = Context.Employees
             .GroupBy(b => b.Id)
             .Select(e => new Table1
             {
                 Id = e.Key,
                 Salary = e.OrderByDescending(f => f.Salary).Select(f => f.Salary).Distinct().Skip(1).First()
             }).ToList();

如果它对 sql 不友好,则在 GroupBy 之后执行 ToList((

我在工资部分添加了不同的,以检查员工 ID = 1 是否有 450、450、450 和 300 作为薪水,那么 300 将是我心目中第二高的薪水

SQL 版本:

SELECT EmpId, MAX(Salary) AS Salary
FROM SalaryTable x
WHERE Salary < (SELECT MAX(Salary) FROM SalaryTable WHERE EmpId = x.EmpId)
GROUP BY EmpId

LINQ 版本:

list
   .GroupBy(x => x.Id)
   .Select(g => 
              g.GroupBy(item => item.Salary)
              .OrderByDescending(e => e.Key)
              .Skip(1)
              .First().First());

最新更新