この記事では、高度なデータ分析のための強力なツール、SQLウィンドウ関数について説明します。条項ごとのパーティションや順序を含む構文を詳しく説明し、合計、ランキング、遅れ/リーディング、移動平均での使用を紹介します。
分析関数とも呼ばれるウィンドウ関数は、SQLの強力なツールであり、現在の行に何らかの形で関連する一連のテーブル行で計算を実行できるようにします。グループをグループ化し、各グループの単一の値を返す集計関数(Sum、Avg、Countなど)とは異なり、ウィンドウ関数は、グループ化せずに行のセット(「ウィンドウ」)で動作します。これは、結果セットのすべての元の行を保持することを意味しますが、ウィンドウに基づいて計算された列が追加されています。
基本的な構文には、関数後のOVER
句を指定することが含まれます。この句はウィンドウを定義します。 OVER
句内の重要なコンポーネントは次のとおりです。
RANK
、 ROW_NUMBER
、 LAG/LEAD
などの関数にとって重要です。ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
、現在の行、前の行、および次の行が含まれます。 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
パーティションの先頭から現在の行までのすべての行が含まれます。たとえば、販売の合計を計算するには:
<code class="sql">SELECT order_date, sales, SUM(sales) OVER (ORDER BY order_date) as running_total FROM sales_table;</code>
このクエリは、各注文日までの売上の累積額を計算します。ここでは、 ORDER BY
順序が不可欠です。それがなければ、実行の合計は予測不可能です。
ウィンドウ関数は非常に用途が広く、データ分析には多くのアプリケーションがあります。一般的なユースケースには次のものが含まれます。
RANK()
、 ROW_NUMBER()
、 DENSE_RANK()
、 NTILE()
などの関数が使用されています。LAG()
およびLEAD()
関数が採用されています。ウィンドウ関数は、多くの場合、セルフボインまたはサブクエリを使用して同様の結果を達成する従来のSQLクエリよりも優れています。これは:
ただし、パフォーマンスの増加は、データセットのサイズ、クエリの複雑さ、使用されている特定のデータベースシステムなど、いくつかの要因に依存することに注意することが重要です。場合によっては、適切に最適化された従来のクエリは、ウィンドウ関数クエリよりも優れている場合があります。
ウィンドウ機能が複雑なクエリを大幅に簡素化するこれらのシナリオを考えてみましょう。
シナリオ1:販売に基づいてカテゴリごとに上位3つの製品を見つける。
ウィンドウ関数がないと、各カテゴリに自己結合またはサブクエリが必要になります。ウィンドウ関数を使用:
<code class="sql">WITH RankedSales AS ( SELECT product_name, category, sales, RANK() OVER (PARTITION BY category ORDER BY sales DESC) as sales_rank FROM products ) SELECT product_name, category, sales FROM RankedSales WHERE sales_rank </code>
シナリオ2:前月と比較して、売上の変化率の計算。
LAG()
を使用すると、これが大幅に簡素化されます。
<code class="sql">SELECT order_date, sales, (sales - LAG(sales, 1, 0) OVER (ORDER BY order_date)) * 100.0 / LAG(sales, 1, 1) OVER (ORDER BY order_date) as percentage_change FROM sales_table;</code>
これらの例は、ウィンドウ関数が複雑さを劇的に減らし、複雑なSQLクエリの読みやすさとパフォーマンスを改善する方法を示しています。これらは高度なデータ分析のための強力なツールであり、SQL開発者のツールキットの重要な部分である必要があります。
以上が高度なデータ分析にSQLでウィンドウ関数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。