如何解决在 case 语句中使用通过聚合窗口函数实现的列时出错
我正在学习 SQL 窗口函数作为解决 leet 代码平均工资、部门与公司、https://leetcode.com/problems/average-salary-departments-vs-company/
我使用窗口函数编写了一个查询
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_ERROR:“字段列表”中的未知列“dep_avg”
为什么我会收到此错误?
解决方法
您不能在同一个 select 子句中引用在 select 子句中定义的别名。原因是别名可能还不能使用。这里最简单的方法是使用子查询:
WITH cte AS (
SELECT LEFT(pay_date,7) AS month,department_id,AVG(amount) OVER (PARTITION BY LEFT(pay_date,7),department_id) AS dep_avg,7)) AS com_avg
FROM salary s
INNER JOIN employee e
ON s.employee_id = e.employee_id
)
SELECT month,dep_avg,com_avg,CASE WHEN dep_avg = com_avg THEN 'same' ELSE 'not same' END AS comparison
FROM cte;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。