【问题标题】:How do I select employees most profitable case's?如何选择员工最赚钱的案例?
【发布时间】:2011-02-18 19:05:29
【问题描述】:

在 ms sql 中,我遇到了一个需要执行但无法解决的查询。

我已将其简化为可以应用于我的情况的员工案例。

Employee: [EmpID, Name]
Case    : [CaseID, EmployeeID, CaseName, Profit]

我如何选择一个员工最赚钱的案例反对他的名字?

我想要这样的结果,

Result  : [EmpID, Name, CaseID, CaseName, Profit]

【问题讨论】:

  • 什么数据库管理系统?如果我们知道数据库系统,就有最佳的方法来做到这一点

标签: sql database


【解决方案1】:
SELECT *
FROM   Employee e
       INNER JOIN Case c ON c.EmployeeID = e.EmpID
       INNER JOIN (
         SELECT EmployeeID, MAX(Profit) AS Profit
         FROM   Case
         GROUP BY 
                EmployeeID
       ) pmax ON pmax.EmployeeID = c.EmployeeID
                 AND pmax.Profit = c.Profit

请注意,如果您的员工有相同利润的案例,这并不完整。对于这些情况,您可以在组合中添加另一个联接

【讨论】:

  • @Lieven - 想想,应该是 SUM 而不是 MAX。同一个员工处理过多个案例的地方。
  • @Sachin,我不这么认为(但可能是错的)。 郑重声明,我没有对你投反对票
  • 在我的案例中有些员工的利润相同,但我不明白为什么你的不完整。你确定是按 EmployeeID 分组的吗? (哦,等等,我明白了 - 相同的员工相同的利润.. 啊,这不是问题 :)) ty
  • 利润相同的员工不是问题。具有相同利润的多个案例的员工是。在这种情况下,您希望返回什么情况(没有双关语)。
  • @Lieven - 嘿,这与否决票无关,反正我的回答是错误的。对此并不在意。不用担心。只是想,在 CASE 中可以有多个具有相同 empID 的记录,但 OP 应该告诉.. :)
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
相关资源
最近更新 更多