分區查詢:了解PARTITION BY 與GROUP BY
在資料聚合領域,資料庫查詢通常依賴GROUP BY 子句操縱與聚合數據。最近,一種替代技術 PARTITION BY 引起了尋求最佳化查詢效能的開發人員的注意。但這兩個子句有何不同?
PARTITION BY 與 GROUP BY 不同,它在視窗函數的上下文中運行,例如 ROW_NUMBER()。其主要目的是根據特定標準將資料劃分為子集,允許計算每個子集中的值,就像滑動視窗滑動一組資料一樣。
另一方面,GROUP BY 會修改整個查詢,從而能夠跨具有相似值的行聚合資料。它透過合併傳回的行並計算平均值或總和等聚合值來減少傳回的行數。
為了說明差異,請考慮以下範例:
使用GROUP BY:
SELECT customerId, COUNT(*) AS orderCount FROM Orders GROUP BY customerId;
此查詢依照客戶ID 分組,並計算每個客戶的訂單數量,從而減少返回的行數。
使用 PARTITION BY:
SELECT ROW_NUMBER() OVER (PARTITION BY customerId ORDER BY orderId) AS OrderNumberForThisCustomer FROM Orders;
此查詢計算每個客戶分區中每個訂單的訂單號,從而對每個客戶的訂單。它不會影響傳回的行數。
總之,雖然 PARTITION BY 和 GROUP BY 都有不同的用途,但它們具有資料操作和聚合的共同目標。 GROUP BY 對查詢進行全域操作,減少傳回的行數,而 PARTITION BY 在視窗函數的範圍內工作,不會改變行數。了解這些子句之間的差異使開發人員能夠根據特定的資料操作自訂查詢並提高查詢效能。
以上是PARTITION BY 與 GROUP BY:SQL 查詢有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!