MySQL 最新版本支持開窗函數,這是一種強大的 SQL 技術,可以在查詢數據時進行更高級的分析和計算。
SELECT employee_id, first_name, last_name, salary, AVG(salary) OVER (PARTITION BY department_id) AS department_avg, RANK() OVER (ORDER BY salary DESC) AS rank_salary FROM employees;
以上是一個示例查詢語句,包含了兩個開窗函數:AVG 和 RANK。
AVG函數將按照部門對員工薪資進行平均,并通過 PARTITION BY 子句進行分區,結果將作為 department_avg 列返回。RANK 函數將對所有員工按照薪資進行排名,并通過 ORDER BY 子句進行排序,結果將作為 rank_salary 列返回。
SELECT department_id, first_name, last_name, salary, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS row_num FROM employees;
另一個示例查詢語句包含了 ROW_NUMBER 函數,將在每個部門內對員工按照薪資進行排序,并返回他們的排名。
開窗函數遍歷整個查詢結果集,而不僅限于單個行,因此可以對查詢結果進行更復雜的計算和聚合,從而使結果更有意義。