-- MySQL 8.0 引入了窗口函数(Window Functions),这是一个非常有用的新特性。以下是一个使用窗口函数的示例代码:
SELECT
department,
employee_name,
salary,
AVG(salary) OVER (PARTITION BY department) AS avg_salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank_in_dept
FROM employees;
-- 解释:
-- 1. `AVG(salary) OVER (PARTITION BY department)` 计算每个部门的平均工资。
-- 2. `RANK() OVER (PARTITION BY department ORDER BY salary DESC)` 为每个部门的员工按工资从高到低排名。
-- 3. `PARTITION BY` 子句将结果集划分为多个分区(这里按部门划分),窗口函数在每个分区内独立计算。
-- 另一个新特性是引入了公共表表达式(Common Table Expressions,CTE),使查询更易读和维护。以下是一个使用 CTE 的示例代码:
WITH RECURSIVE org_hierarchy AS (
SELECT employee_id, manager_id, employee_name, 1 AS level
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.employee_id, e.manager_id, e.employee_name, oh.level + 1
FROM employees e
INNER JOIN org_hierarchy oh ON e.manager_id = oh.employee_id
)
SELECT * FROM org_hierarchy;
-- 解释:
-- 1. `WITH RECURSIVE` 定义了一个递归的 CTE,用于处理层次结构数据(如组织结构)。
-- 2. `UNION ALL` 将递归部分与非递归部分结合在一起。
-- 3. `level` 列记录了每个员工在组织层次中的级别。
以上代码展示了 MySQL 8.0 中两个重要的新特性:窗口函数和公共表表达式。这些特性使得复杂的查询更加简洁和高效。
上一篇:mysql 当前日期前一天
下一篇:linux下载mysql
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站