有一個任務:顯示員工的小時費率,在 Max In Department 列中指明每個部門的最大費率。在每個部門內,將所有投注分組,以便具有相同值的投注屬于同一組。
我寫了一個請求以部門為單位分組投標,我遇到了一個問題,部門中的最高投標是按每組投標細分的列計算的,但是部門有必要,我通過單獨的請求和與此的連接以及通過嵌套查詢嘗試,我無法理解我做錯了什么
我將不勝感激任何幫助!
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 eph.BusinessEntityID = edh.BusinessEntityID
GROUP BY Name, Rate
第一張照片是我的請求有錯誤的結果。第二張照片,進行選擇的表(1 表 EmployeePayHistory,員工費率所在的表;2 表 EmployeeDepartmentHistory;3 表僅取部門名稱)。第三張照片,結果應該是(用Paint制作)
照片#1照片#2照片#3
uj5u.com熱心網友回復:
一種可能的方法是添加磁區。
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
這應該顯示每個部門的第一行與部門最大值匹配。
uj5u.com熱心網友回復:
您的GROUP BY Name, Rate子句將為每個不同的部門名稱和費率創建單獨的組,這意味著該組中的每個費率都是相同的。這就是為什么 Max(Rate) 為您提供與 Rate 相同的值。
如果您需要在同一行顯示單個費率和“每個部門的最大費率”,您可以使用視窗函式。SQL 視窗函式可以被認為是定義了自己的范圍,獨立于 GROUP BY。在您的情況下,您想要洗掉 GROUP BY 并計算按部門劃分的 MAX 比率。
搜索“SQL 視窗函式”以獲取更多資訊、語法和示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436646.html
