1. 程式人生 > 實用技巧 >SQL學習(五) 高階處理

SQL學習(五) 高階處理

5.1

請說出針對本章中使用的 product(商品)表執行如下 SELECT 語句所能得到的結果。

SELECT  product_id
       ,product_name
       ,sale_price
       ,MAX(sale_price) OVER (ORDER BY product_id) AS Current_max_price
  FROM product

就是將每個商品按照累計的順序找到其sale_price前面的最大值,作為新的一列

5.2

繼續使用product表,計算出按照登記日期(regist_date)升序進行排列的各日期的銷售單價(sale_price)的總額。排序是需要將登記日期為NULL 的“運動 T 恤”記錄排在第 1 位(也就是將其看作比其他日期都早)

SELECT  regist_date,
        SUM(sale_price) AS Current_sum
FROM product
GROUP BY regist_date WITH ROLLUP;

5.3

思考題

① 視窗函式不指定PARTITION BY的效果是什麼?

② 為什麼說視窗函式只能在SELECT子句中使用?實際上,在ORDER BY 子句使用系統並不會報錯。

① 不指定的話,只按照ORDER BY的列來全域性排序。
如果指定了PARTITION BY,則會按照指定的列進行細分排序

② 執行順序FROM → WHEREGROUP BYHAVING
SELECTORDER BY 視窗函式是為了動態分析處理,在SELECT子句可以進行篩選,而ORDER BY子句中只是用來排序,無法實現相應功能。