GROUP BY 是一種常用的SQL 構造,有助於根據公共值將資料行分組,從而能夠評估聚合這些分組行上的函數。然而,資料庫操作中 PARTITION BY 的出現,引發了人們對這兩種操作之間差異的疑問。
GROUP BY 概述
GROUP BY 將共享相同資料記錄的資料分組指定列中的值,將它們折疊成不同的群組。然後為每個群組計算後續聚合函數(例如 SUM()、COUNT())。 GROUP BY 的主要目的是匯總和壓縮大型資料集。
使用 PARTITION BY 進行分區
與 GROUP BY 不同,PARTITION BY 在視窗函數的上下文中運作。這些函數評估由特定條件定義的範圍(或「視窗」)內的資料行。 PARTITION BY 根據指定的列值將視窗資料劃分為多個分區。然後將視窗函數單獨應用於每個分區,以便進行更精細和細緻的計算。
主要差異
範例
考慮一個訂單表:
CustomerID | OrderID |
---|---|
1 | 10 |
1 | 15 |
2 | 20 |
2 | 25 |
使用群組BY:
SELECT CustomerID, COUNT(*) AS OrderCount FROM Orders GROUP BY CustomerID
輸出:
CustomerID | OrderCount |
---|---|
1 | 2 |
2 | 2 |
使用 PARTITION BY:
SELECT ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY OrderID) AS OrderNumberForRow FROM Orders
輸出:
CustomerID | OrderID | OrderNumberForRow |
---|---|---|
1 | 10 | 1 |
1 | 15 | 2 |
2 | 20 | 1 |
2 | 25 | 2 |
在此範例中,PARTITION BY 會以 CustomerID 分隔數據,並在每個分割區內連續分配行號。
總而言之,PARTITION BY 在視窗函數運算方面提供了額外的靈活性,可以對資料進行分區以進行更有針對性的評估。相比之下,GROUP BY 提供全局聚合和行縮減以實現簡潔的資料摘要。理解這些操作之間的差異對於優化 SQL 程式碼和最大化查詢效率至關重要。
以上是GROUP BY 與 PARTITION BY:SQL 中有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!