我對 SQL 和資料工程相當陌生。最近偶然接觸到視窗函式,發現視窗函式的操作也可以通過group by來完成。有人可以在這里解釋兩者之間的區別,以及何時使用視窗函式而不是 group by。
致模組 - 請不要關閉此問題。這個問題之前沒有發布過,我相信一個好的答案會給堆疊社區帶來很多價值。我在互聯網上搜尋答案,但沒有網站/文章/視頻有明確的解釋,它們只會讓我更加困惑。
uj5u.com熱心網友回復:
簡而言之,非常簡單:視窗函式保留結果行,group by壓縮它們。如果您需要的資訊與您需要的聚合有關group by,如果資訊與您需要的特定行有關,則需要視窗函式。
例如:假設您收集了具有部門和薪水的員工。要知道部門的平均工資是多少,請使用select dept_id, avg(salary) from emp group by dept(聚合)。要了解每個員工與該平均值有何不同,請使用select emp_id, salary - avg(salary) over (partition by dept_id) from emp(視窗函式)。
還有幾個用例可以通過兩個視窗函式來解決group by,例如select grp, min(value) ... group by grp,等效于select grp, value from (select grp, row_number() over (partition by grp order by value) as rn, value ...) x where x.rn = 1),因此邊界有些模糊,其他標準(例如可讀性、可擴展性或性能)必須幫助決定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436636.html
