合併
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;