首頁 >資料庫 >mysql教程 >GROUP BY 與 PARTITION BY:SQL 中有什麼差別?

GROUP BY 與 PARTITION BY:SQL 中有什麼差別?

DDD
DDD原創
2025-01-06 06:12:39947瀏覽

GROUP BY vs. PARTITION BY: What's the Difference in SQL?

理解PARTITION BY 和GROUP BY 之間的差異

GROUP BY 是一種常用的SQL 構造,有助於根據公共值將資料行分組,從而能夠評估聚合這些分組行上的函數。然而,資料庫操作中 PARTITION BY 的出現,引發了人們對這兩種操作之間差異的疑問。

GROUP BY 概述

GROUP BY 將共享相同資料記錄的資料分組指定列中的值,將它們折疊成不同的群組。然後為每個群組計算後續聚合函數(例如 SUM()、COUNT())。 GROUP BY 的主要目的是匯總和壓縮大型資料集。

使用 PARTITION BY 進行分區

與 GROUP BY 不同,PARTITION BY 在視窗函數的上下文中運作。這些函數評估由特定條件定義的範圍(或「視窗」)內的資料行。 PARTITION BY 根據指定的列值將視窗資料劃分為多​​個分區。然後將視窗函數單獨應用於每個分區,以便進行更精細和細緻的計算。

主要差異

  1. 範圍: GROUP BY 影響整個查詢結果,並將所有符合指定條件的行分組和聚合。另一方面,PARTITION BY 僅限於視窗函數,僅在定義的視窗範圍內對資料進行分區。
  2. 對行計數的影響: GROUP 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn