SQLを使用した実行中の合計の計算October20,2015|Andy Granowitz
最後の5ヶ月に参加したユーザーは何人ですか? Q2の総売上高は何でしたか? 月のサインアップコホートからどのくらいの収入が来ましたか?
これらの質問には単一の番号で回答できますが、時間の経過とともに実行された合計を確認すると便利です。
通常、データは増分的に格納されます。 たとえば、1日あたりの売上高の表は次のとおりです:
Date | Sales |
---|---|
10/1/2015 | 5 |
10/2/2015 | 3 |
10/3/2015 | 7 |
10/4/2015 | 8 |
10/5/2015 | 2 |
10/6/2015 | 3 |
10/7/2015 | 6 |
How do we generate the following table of cumulative sales over time? In SQL, there are two typical approaches: a self join or a window function.
Date | Running Total of Sales |
---|---|
10/1/2015 | 5 |
10/2/2015 | 8 |
10/3/2015 | 15 |
10/4/2015 | 23 |
10/5/2015 | 25 |
10/6/2015 | 28 |
10/7/2015 | 34 |
A self join is a query that compares a table to itself. この場合、実行中の合計を計算するために、各日付をそれ以下の日付と比較しています。 具体的には、最初のテーブルからの日付以下の日付を持つすべての行に対して、2番目のテーブルのsales
の合計を取ります。 これはPostgres/Redshift構文ですが、他のSQL方言は非常に似ています。これは悪いアプローチではありません。select
from
join
group by
ステートメントのみを使用する拡張可能なSQLの良しかし、それは簡単なタスクのためのコードがたくさんあります。
ウィンドウ関数を試してみましょう。 これらは、一連の行のメトリックを計算するように設計されています。 私たちの場合、日付が現在の行の日付以下のすべての行を合計したいとします。
window関数は、関数を実行する行のセットをフィルタリングして配置することができます。 ここでは、order by date rows unbounded preceding
sum関数を現在の行の日付の前にのみsales
に制限します。 ウィンドウ関数は、時間ベースの分析クエリに非常に便利です; 詳細については、Postgresのドキュメントを開始するのに最適な場所です。
チャートを作成し、チームメイトと意気揚々と共有する最後のステップは、Wagonを使用して簡単に達成できます。 勝利のためのウィンドウ機能!
Wagonは、アナリストやエンジニアのための近代的なSQLエディタです:クエリを記述し、データを視覚化し、あなたのチームとグラフを共有します。 無料でサインアップ: