1. 程式人生 > 實用技巧 >【SQL】開窗函式

【SQL】開窗函式

參考連結:https://b23.tv/Ktb0oL

1.為什麼用開窗函式(什麼情況用)

  • eg:假設一個部門有很多人,又有很多部門,想求每個部門的平均工資
    • 一般情況下,group by部門,只會得到部門名和最後的平均工資
    • 利用開窗函式,還可以另外顯示每個部門的人員資訊

2.基本語法

# function:聚合函式
# expression:你想要的列(工資)
function (expression)
OVER (PARTITION BY column
      ORDER BY column ASC/DESC
      ROWS [···])
  • OVER():必須有,其餘的不是必須的
  • eg:計算累計工資
    • 姓名(name)、部門(department)、小組(group)、工資(salary)、入職日期(join_date)
    • PARTITION(分割) BY
      • 每個部門的 - PARTITION BY department
      • 每個部門及小組的 - PARTITION BY department,group
  • ROWS
    • 預設:ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
      • (unbounded preceding and current row 所有前面的行和現在的行)
    • ROWS BETWEEN (x 是一個數值) …… AND ……
      • UNBOUNDED PRECEDING(前面所有行)
      • x PRECEDING (前x行)
      • x FOLLOWING (後x行)
      • CURRENT ROW (當前行)
  • function (expression)
    • avg(column)
    • count(*) / count(column)
    • dense_rank( )
    • lag(column [, offset ]) / lead(……)
    • max(column) , min(column), median(column)