Window関数についての知識をまとめた(その2)
はじめに
データ分析における重要な関数そうなので、何章かに分けて、Window関数についてまとめています。
前回の記事は👇
今回もいくつかのサンプルを用意して説明します。
今回は、Window関数の機能一覧の紹介と、Window関数の典型的な利用ケースである移動平均を紹介していきます。
今回もSQLの実行は 「DB Fiddle」というWebサービスを使ってみます。
Window関数の機能一覧の紹介
Window関数の機能を1枚絵で俯瞰してみましょう。
以下の論文から引用してます。
Efficient processing of window functions in analytical SQL queries | Request PDF
3つの機能から成り立っていることが分かります
- PARTITION BY 句によるレコード集合のカット
- ORDER BY 句による順序づけ
- フレーム句による現在の行を中心とした範囲の定義
Window関数で移動平均を算出
当日と前日の単純移動平均を計算してみましょう
参考
Schema (MySQL v8.0)
CREATE TABLE temperatures (
id INT NOT NULL PRIMARY KEY auto_increment,
date DATE,
city_name TEXT,
avg_temp FLOAT
);
INSERT INTO temperatures VALUES
(1, '2020-12-01', '東京', 10.0),
(2, '2020-12-02', '東京', 9.0),
(3, '2020-12-03', '東京', 8.0),
(4, '2020-12-04', '東京', 7.0),
(5, '2020-12-01', '愛知', 11.0),
(6, '2020-12-02', '愛知', 10.0),
(7, '2020-12-03', '愛知', 9.0),
(8, '2020-12-04', '愛知', 8.0);
Query
SELECT
date AS 日付,
city_name,
AVG(avg_temp) OVER avg_temp_2days AS '移動平均2日間'
FROM temperatures
WINDOW avg_temp_2days AS (
PARTITION BY city_name
ORDER BY id ASC
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
);
ウィンドウ関数のフレーム句で使用できるオプション
- ROWS: 移動単位を行で指定
- n PRECEDING: nだけ前(小さい方)へ移動する
- CURRENT ROW: 現在行
Results
日付 | city_name | 移動平均2日間 |
---|---|---|
2020-12-01 | 愛知 | 11 |
2020-12-02 | 愛知 | 10.5 |
2020-12-03 | 愛知 | 9.5 |
2020-12-04 | 愛知 | 8.5 |
2020-12-01 | 東京 | 10 |
2020-12-02 | 東京 | 9.5 |
2020-12-03 | 東京 | 8.5 |
2020-12-04 | 東京 | 7.5 |
参照
29 - 35p
アウトプット100本ノック実施中
Author And Source
この問題について(Window関数についての知識をまとめた(その2)), 我々は、より多くの情報をここで見つけました https://qiita.com/ryosuketter/items/131b71b486ca7c2a7d54著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .