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 BYHAVINGSELECTORDER BY
窗口函數是爲了動態分析處理,在SELECT子句可以進行篩選,而ORDER BY子句中只是用來排序,無法實現相應功能。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章