MySQL窗口函数基础使用报错求助:avg(salary) over()语法错误
问题描述
我最近开始学习SQL,在MySQL中执行基础窗口函数时遇到问题,不清楚原因。
创建表语句:
CREATE TABLE Employee( emp_id INT PRIMARY KEY, first_name VARCHAR(15), last_name VARCHAR(15), birth_date DATE, sex VARCHAR(2), salary INT, supervisor_id INT, branch_id INT );
已向该表插入若干员工数据,执行以下查询时报错:
select *, avg(salary) over() from mysql.employee;
报错信息:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '() from mysql.employee' at line 1
原因分析
这个语法错误的核心原因是你的MySQL版本低于8.0。窗口函数(包括OVER()子句)是从MySQL 8.0版本才开始支持的特性,低版本MySQL无法识别OVER()语法,因此触发1064语法错误。
解决方案
检查MySQL版本
执行以下语句确认当前版本:SELECT VERSION();如果返回的版本号小于
8.0.0,就说明是版本不兼容问题。升级MySQL版本(推荐)
升级到MySQL 8.0及以上版本后,你可以直接使用窗口函数语法,原查询语句无需修改即可正常执行。低版本替代写法
如果暂时无法升级版本,可以用子查询实现相同的全局薪资平均效果:SELECT *, (SELECT AVG(salary) FROM mysql.employee) AS avg_salary FROM mysql.employee;
内容的提问来源于stack exchange,提问作者Zaha
相关产品推荐
相关产品推荐

