我試圖了解帶有 OVER 子句的嵌套 SUM 如何在 SQL 中作業。假設我的資料庫中有以下架構
Time(timeID, date, month, year);
District(districtID, districtName, region, state);
Delivery(destinationDistrictID, timeID, numberOfDeliveries);
并假設我想計算同一年的(每個地區的交付數量)/(該州的交付數量)。進行計算的查詢是:
SELECT region, year, (state),
SUM(NumberOfDeliveries)/SUM(SUM(NumberOfDeliveries)) OVER (PARTITION BY state, year),
FROM Delivery del, Time t, District dis
WHERE t.timeID = del.timeID AND dis.DistrictID = del.destinationDistrictID
GROUP BY region, year, state
在這種情況下,我無法理解 PARTITION BY 是如何作業的。特別是我無法理解哪些資料被傳遞給分析函式(OVER 子句)。
是否PARTITION BY適用于整個資料集或 GROUP BY 聚合的行?
非常感謝大家。
uj5u.com熱心網友回復:
視窗函式是基于設定的,并且通常在查詢中最后評估,在其他所有內容評估之后。這是您再次致電SUM():
SUM(SUM(NumberOfDeliveries)) OVER (PARTITION BY state, year)
這將在 之后進行評估GROUP BY,此時中間表將為每個地區、州和年份提供一條記錄。您的分析函式呼叫對每個州和年份的所有區域的視窗求和。所以你的表達可以概括為:
total number of deliveries in each region, state, and year /
total number of deliveries in each state and year
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/417571.html
標籤:
上一篇:提取具有重復ID的表中的最新記錄
下一篇:如何在歷史表sql中找到更改的值
