Mysql 在case语句中使用通过聚合窗口函数实现的列时出错

Mysql 在case语句中使用通过聚合窗口函数实现的列时出错,mysql,sql,sql-server,case,window-functions,Mysql,Sql,Sql Server,Case,Window Functions,我正在学习SQL window函数,作为解决leet代码平均工资、部门与公司、 我已经使用窗口函数编写了一个查询 select left(pay_date,7) as month, department_id, avg(amount) over (partition by left(pay_date,7), department_id) as dep_avg, avg(amount) over(partition by left(pay_date,7)) as com_avg, CASE

我正在学习SQL window函数,作为解决leet代码平均工资、部门与公司、

我已经使用窗口函数编写了一个查询

select left(pay_date,7) as month, department_id,
avg(amount) over (partition by left(pay_date,7), department_id) as dep_avg,
avg(amount) over(partition by left(pay_date,7)) as com_avg,
CASE 
    WHEN dep_avg = com_avg THEN 'same'
    else 'not same' end as comparision                               
from salary s
inner join employee e
on s.employee_id = e.employee_id
查询在没有case语句的情况下运行良好,但在使用case语句时,它给出了一个错误

查询错误:错误:ER_BAD_FIELD_错误:“FIELD list”中的未知列“dep_avg”


我无法理解为什么会出现这个错误。有人能帮我吗?

您不能在同一select子句中引用select子句中定义的别名。原因是别名可能尚未可用。最简单的方法是使用子查询:

以cte为例 选择LEFTpay_date,7作为月份,部门id, 按LEFTpay_date划分的AVGamount,7,部门id为dep_avg, 按LEFTpay_日期划分的AVGamount,7作为com_平均值 从工资s 内部联接雇员e 在s.employee_id=e.employee_id上 选择月份、部门id、部门平均值、部门平均值、, 当dep_avg=com_avg时,则“相同”或“不相同”作为比较结束 来自cte;
不能在同一select子句中引用select子句中定义的别名。原因是别名可能尚未可用。最简单的方法是使用子查询:

以cte为例 选择LEFTpay_date,7作为月份,部门id, 按LEFTpay_date划分的AVGamount,7,部门id为dep_avg, 按LEFTpay_日期划分的AVGamount,7作为com_平均值 从工资s 内部联接雇员e 在s.employee_id=e.employee_id上 选择月份、部门id、部门平均值、部门平均值、, 当dep_avg=com_avg时,则“相同”或“不相同”作为比较结束 来自cte;
你在用还是?该错误不是SQL Server错误。对于该错误,您试图引用在“按别名选择”中定义的列;你不能那样做。您需要重复该表达式,或使用CTE/子查询。输出列的别名不能用于其他输出列表达式。您只能在GROUP BY、HAVE、ORDER BY中引用它。仅供参考,大小写是一个表达式而不是一个语句。为什么在日期列中使用LEFT?左边是一个字符串函数,应该使用适当的日期/时间数据类型存储日期。是否使用或?该错误不是SQL Server错误。对于该错误,您试图引用在“按别名选择”中定义的列;你不能那样做。您需要重复该表达式,或使用CTE/子查询。输出列的别名不能用于其他输出列表达式。您只能在GROUP BY、HAVE、ORDER BY中引用它。仅供参考,大小写是一个表达式而不是一个语句。为什么在日期列中使用LEFT?LEFT是一个字符串函数,应使用适当的日期/时间数据类型存储日期。