您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

我不明白为什么我的团队失败了

我不明白为什么我的团队失败了

正如其他人已经解释的那样,“你不能吃蛋糕和吃它”。 您可以 某些内容分组,然后可以按原样返回它,也可以汇总一些内容。在您的情况下,您想按商店分组,即每个商店有一个单独的结果行(与内部联接条件匹配),而不是按员工。在这种情况下,必须汇总员工数据,其中包括姓名。 经典汇总会使用组中的所有条目,因此您将使用汇总中的所有员工姓名,这不是您想要的,因为您只想要薪水最高的员工。

幸运的是Oracle数据库确实有这样的情况下,一些(尽管可能不是全部),那就是KEEP聚集函数调节剂,其DENSE_RANKLAST/FIRST。 这种结构允许对组中行的子集执行聚合,您KEEP在聚合中所处的位置FIRSTLAST在指定的排名中(基于给定的排序标准)。在您的情况下,您需要根据薪水标准对组内的雇员(商店的雇员)进行排序,这样,汇总将仅限于薪水最高的雇员。假设,即工资是唯一的值(他们通常不是),这会给你一个子组的一个员工,这样你就可以申请任何你想要的聚合(经常MAXMIN),并且仍然获得该名称。如果我们假设工资值不是唯一的,那么最高薪水可能不止一个员工- 首先是平局。在那种情况下,您可以在排名顺序中引入平局决胜方案(例如,薪水之后的次要条件可以是职位名称),也可以在汇总级别解决该问题(例如,通过选择MAXMIN员工姓名)。

总而言之,我们得到的是这样的:

SELECT MAX(e.ename)
         KEEP (DENSE_RANK FIRST ORDER BY e.sal DESC NULLS LAST, e.job) AS name,
       MIN(e.job)
         KEEP (DENSE_RANK FIRST ORDER BY e.sal DESC NULLS LAST, e.job) AS job,
       e.store_id,
       MAX(e.sal) AS salary,
       s.city
  FROM employees e
 INNER JOIN stores s ON e.store_id = s.store_id
 GROUP BY e.store_id, s.sity
其他 2022/1/1 18:53:25 有409人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶