首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用联接从多个表中获取选择

使用联接从多个表中获取选择
EN

Stack Overflow用户
提问于 2022-03-02 20:30:13
回答 2查看 55关注 0票数 1

有一个任务:显示员工的每小时薪酬,指示部门中最高栏中每个部门的最高薪酬。在每个部门内,将所有投注分成组,以便具有相同值的投注是同一组的一部分。

我写了一个请求,要求将投标分成部门组,我遇到了这样的问题:部门的最高标书是由列计算的,每个组的标书都是细分的,但是部门是有必要的,我通过单独的请求和与此的连接以及嵌套的查询来尝试,我不明白我做错了什么。

我将非常感谢您的帮助!

代码语言:javascript
复制
  SELECT Name AS DepartmentName
       , Rate AS GroupOfRate
       , MAX(eph.Rate) AS MaxRateInDepartment
    FROM HumanResources.EmployeeDepartmentHistory edh
         INNER JOIN HumanResources.Department d
                 ON edh.DepartmentID = d.DepartmentID
         INNER JOIN HumanResources.EmployeePayHistory eph
                 ON edh.BusinessEntityID = eph.BusinessEntityID
GROUP BY Name
       , Rate

第一张照片是我请求的结果,有一个错误。第二张照片是选择所在的表(1表EmployeePayHistory,雇员薪酬所在;2表EmployeeDepartmentHistory;3表,仅取部门名称)。第三张照片,应该是(用油漆制作的)

照片#1

照片#2

照片#3

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-02 21:02:41

一种可能的方法是添加一个分区。

代码语言:javascript
复制
  SELECT Name AS DepartmentName
       , Rate AS GroupOfRate
       , MAX(eph.Rate) OVER ( PARTITION BY Name ORDER BY Name ) AS MaxRateInDepartment
    FROM HumanResources.EmployeeDepartmentHistory edh
         INNER JOIN HumanResources.Department d
                 ON edh.DepartmentID = d.DepartmentID
         INNER JOIN HumanResources.EmployeePayHistory eph
                 ON edh.BusinessEntityID = eph.BusinessEntityID
GROUP BY Name
       , Rate

通过按比率分组,您将MAX限制为部门名称和比率。OVER子句将其释放为只查看部门名称。

可以通过向查询添加ORDER BY子句来确认。

代码语言:javascript
复制
ORDER BY Name
       , Rate

这应该显示每个部门的第一行与部门的最大值匹配。

票数 0
EN

Stack Overflow用户

发布于 2022-03-02 22:46:47

您的GROUP BY Name, Rate子句将为每个不同的部门名称和比率创建单独的组,这意味着该组中的每个比率都是相同的。这就是为什么Max( Rate )给出了与Rate相同的值。

如果您需要在同一行中显示单个费率和“每个部门的最高费率”,则可以使用窗口函数。SQL窗口函数可以被看作是定义自己的作用域,而不是按组划分的。在您的情况下,您希望删除组并计算按部门划分的最大比率。

搜索"SQL窗口函数“以获得更多信息、语法和示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71328767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档