如何在SQL和LINQ中获得每个雇员的第二个最高薪水的价值?

时间:2019-07-19 08:02:36

标签: sql-server 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查询中显示第二个最高薪水的每个雇员。

2 个答案:

答案 0 :(得分:1)

在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是我心中第二高的薪水

答案 1 :(得分:0)

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());
相关问题