SQL 合併&移動平均


合併

SELECT customers.Name, orders.Order_No 兩個表內的資訊
FROM customers
INNER JOIN orders
ON customers.C_Id=orders.C_Id;  兩個相同的表

使用 PARTITION 進行類別各別內部排名

將資料透過 category 進行分類並使用 RANK() 和進行排名:

SELECT name, price, category, RANK() OVER(PARTITION BY category ORDER BY price) FROM products;       PARTITION是分類別

不使用 PARTITION 進行總排名

PARTITION BY 也可以不使用,就會將資料視為一個大窗格(Frame)變成一般的彙總函式使用。

SELECT name, price, category, RANK() OVER(ORDER BY price) FROM products;

以 category 當作窗格進行累加價格

透過 SUM(price) OVER(PARTITION BY category ORDER BY price) 可以使用 category 將資料切分進行累加。

SELECT name, price, category, SUM(price) OVER(PARTITION BY category ORDER BY price) AS aggregate_price
FROM products;

名詞定義

CURRENT ROW:目前基準列資料
PRECEDING:基準列前面
FOLLOWING:基準列後面

移動平均範例 I

透過視窗函數建立移動窗格 Frame 進行每一筆資料和前兩(PRECEDING)筆進行移動平均(使用 id 進行排序)。

以下代表包含本身和前兩筆取移動平均(PRECEDING 語法要放於 CURRENT ROW 前才符合相對位置):

SELECT id, name, price, category,
AVG(price) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg_price
FROM products;

移動平均範例 II

將 CURRENT ROW 目前資料(CURRENT ROW)和 後面一筆資料(FOLLOWING)當作一個窗格 Frame 進行移動平均:
以下代表包含本身和後一筆取移動平均:

SELECT id, name, price, category,
AVG(price) OVER (ORDER BY id ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS moving_avg_price
FROM products;

移動平均範例 III

將目前這筆和資料前面一筆以及後面一筆當作窗格進行移動平均。
以下代表包含本身和前後一筆取移動平均:

SELECT id, name, price, category,
AVG(price) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS moving_avg_price
FROM products;







你可能感興趣的文章

GraphQL(1) - 簡介 & 語法

GraphQL(1) - 簡介 & 語法

Day07 MMD (MikuMikuDance)

Day07 MMD (MikuMikuDance)

MTR04_0630

MTR04_0630






留言討論