程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 case 语句中使用通过聚合窗口函数实现的列时出错大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 case 语句中使用通过聚合窗口函数实现的列时出错?

开发过程中遇到在 case 语句中使用通过聚合窗口函数实现的列时出错的问题如何解决?下面主要结合日常开发的经验,给出你关于在 case 语句中使用通过聚合窗口函数实现的列时出错的解决方法建议,希望对你解决在 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,请注明来意。
标签:case