有一个任务:显示员工的每小时薪酬,指示部门中最高栏中每个部门的最高薪酬。在每个部门内,将所有投注分成组,以便具有相同值的投注是同一组的一部分。
我写了一个请求,要求将投标分成部门组,我遇到了这样的问题:部门的最高标书是由列计算的,每个组的标书都是细分的,但是部门是有必要的,我通过单独的请求和与此的连接以及嵌套的查询来尝试,我不明白我做错了什么。
我将非常感谢您的帮助!
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表,仅取部门名称)。第三张照片,应该是(用油漆制作的)
发布于 2022-03-02 21:02:41
一种可能的方法是添加一个分区。
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子句来确认。
ORDER BY Name
, Rate这应该显示每个部门的第一行与部门的最大值匹配。
发布于 2022-03-02 22:46:47
您的GROUP BY Name, Rate子句将为每个不同的部门名称和比率创建单独的组,这意味着该组中的每个比率都是相同的。这就是为什么Max( Rate )给出了与Rate相同的值。
如果您需要在同一行中显示单个费率和“每个部门的最高费率”,则可以使用窗口函数。SQL窗口函数可以被看作是定义自己的作用域,而不是按组划分的。在您的情况下,您希望删除组并计算按部门划分的最大比率。
搜索"SQL窗口函数“以获得更多信息、语法和示例。
https://stackoverflow.com/questions/71328767
复制相似问题