ホームページ > データベース > mysql チュートリアル > GROUP BY と PARTITION BY: SQL の違いは何ですか?

GROUP BY と PARTITION BY: SQL の違いは何ですか?

DDD
リリース: 2025-01-06 06:12:39
オリジナル
927 人が閲覧しました

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

PARTITION BY と GROUP BY の違いを理解する

一般的に使用される SQL 構造である GROUP BY は、共通の値に基づいてデータ行をグループ化することを容易にし、集計の評価を可能にします。これらのグループ化された行に対する関数。しかし、データベース操作における PARTITION BY の出現により、これら 2 つの操作の区別について疑問が生じています。

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート