ホームページ >データベース >mysql チュートリアル >OLAP: キューブ、ロールアップ、およびグループ化セット
データ分析とビジネス インテリジェンスの領域では、OLAP (オンライン分析処理) が基礎テクノロジーとして立っており、膨大なデータセットの多次元分析を容易にします。 OLAP を使用すると、ユーザーは複数の次元にわたってデータを分析することでデータから洞察を得ることができ、ビジネス指標とパフォーマンスの包括的なビューを提供します。
それではここまでで、OLAP の 3 つの主要な機能である CUBE、ROLLUP、GROUPING SETS 演算子について説明します。これは、さまざまな方法でデータを要約および集約する際に重要な役割を果たすことになります。
まず最初の 1 つについて説明しましょう:
キューブは OLAP の強力なツールであり、ディメンションとその集計のすべての可能な組み合わせを生成できます。ディメンションのあらゆる組み合わせの小計と合計を計算することで、データの包括的な多次元ビューを提供し、ユーザーがさまざまな視点や粒度レベルからデータを探索できるようにします。
最初は技術的な話になりますが、クエリで使用するときに必ず理解できると思います。
ある国で賃貸に住んでいる各人の数と性別を知りたいとします。
SELECT country, gender, COUNT(*) FROM rentals GROUP BY CUBE(country, gender) -- This one will group them by its country and gender.
その出力は次のようになります
| country | gender | COUNT(*) | |------------|----------|----------| | USA | Male | 100 | | USA | Female | 150 | | UK | Male | 120 | | UK | Female | 130 | | NULL | Male | 220 | <-- Subtotal for Male across all countries | NULL | Female | 280 | <-- Subtotal for Female across all countries | USA | NULL | 250 | <-- Subtotal for USA across all genders | UK | NULL | 250 | <-- Subtotal for UK across all genders | NULL | NULL | 500 | <-- Grand total
各行が「国」と「性別」の一意の組み合わせを表していることを確認してください。これが CUBE の使用法であり、集計したものに基づいて可能なすべての組み合わせを生成します。各カテゴリの小計と総計があります。
ROLLUP 演算子は、階層的なロールアップ データを生成するために使用されます。事前定義されたディメンション階層の小計を計算し、通常は最も詳細な粒度レベルから最も詳細でない粒度レベルに移動します。階層の各レベルの小計を生成し、指定された列の各組み合わせの小計と総計を含む結果セットを生成します。もっと整理して、もう一度例を作ってみましょう。
SELECT country, gender, COUNT(*) AS rental_count FROM rentals GROUP BY ROLLUP (country, gender);
出力は次のようになります
| country | gender | rental_count | |----------|---------|--------------| | NULL | NULL | 8 | <-- Grand total | NULL | Male | 3 | <-- Subtotal for Male across all countries | NULL | Female | 5 | <-- Subtotal for Female across all countries | USA | NULL | 3 | <-- Subtotal for USA across all genders | USA | Male | 2 | | USA | Female | 1 | | UK | NULL | 3 | <-- Subtotal for UK across all genders | UK | Male | 1 | | UK | Female | 2 |
各カテゴリのカウントの後でその整理が表示され、その小計が出力され、次に総計が表示されます。各カテゴリの小計は、多くの場合、対応するカテゴリ行の隣に表示されることに気づくかもしれません。これは、ROLLUP 演算子が、要約したデータの近くに小計を配置し、直観的で読みやすい出力を提供するように設計されているためです。
GROUPING SETS 演算子を使用して、同様のグループ内に配置した引数によってグループをグループ化しますが、違いは、
のようにその中にグループをいくつでも配置できることです。
GROUP BY GROUPING SET ((country, 性別), (country), (gender)) 最初の引数でデータを国と性別の組み合わせにグループ化でき、2 番目の引数でも国のみでグループ化することができます。 3 番目の引数。
1 つのクエリで 3 つのグループを結合しているようなもので、最初のグループは (国、性別)、次に 2 番目は (国)、そして 3 番目は (性別) です。したがって、グループ化セットを使用せずに同じ結果を達成したい場合は、そのために 3 つのクエリが必要です。
理解できるように、このグループ化セットの例に進みましょう。
SELECT country, gender, COUNT(*) AS rental_count FROM rentals GROUP BY GROUPING SETS (country, gender, ());
その場合、出力は次のようになります
| country | gender | rental_count | |----------|---------|--------------| | NULL | NULL | 8 | <-- Grand total | NULL | Male | 3 | <-- Subtotal for Male across all countries | NULL | Female | 5 | <-- Subtotal for Female across all countries | USA | NULL | 3 | <-- Subtotal for USA across all genders | USA | Male | 2 | | USA | Female | 1 | | UK | NULL | 3 | <-- Subtotal for UK across all genders | UK | Male | 1 | | UK | Female | 2 |
ここでの説明は、国のそれぞれの一意の組み合わせであり、性別が表に示されているのに、なぜ () があるのか疑問に思うでしょう。その場合、これは空の括弧であり、すべてのカウントを合計することを意味します。出力されますが、それを削除すると、各カテゴリの小計のみが表示されます。
キューブ セットとグループ セットに類似性があるのはなぜかと疑問に思われている方は、そのとおりです。キューブは可能なすべての組み合わせを取得しますが、グループ化セットでは 1 つのクエリで必要なだけグループ化できます。
これは学ぶべきことがたくさんあることはわかっていますが、これをクエリで長期間使用し続ければ、それぞれのことを理解できるようになります。どうもありがとう:)
以上がOLAP: キューブ、ロールアップ、およびグループ化セットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。