大佬教程收集整理的这篇文章主要介绍了在 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;
以上是大佬教程为你收集整理的在 case 语句中使用通过聚合窗口函数实现的列时出错全部内容,希望文章能够帮你解决在 case 语句中使用通过聚合窗口函数实现的列时出错所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。