【发布时间】:2021-08-09 12:07:33
【问题描述】:
我正在学习 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”
为什么会出现这个错误?
【问题讨论】:
-
您使用的是mysql 还是sql-server?该错误不是 SQL Server 错误。
-
至于错误,您试图通过其别名引用
SELECT中定义的列;你不能那样做。您需要重复表达式,或使用 CTE/子查询。 -
输出列的别名不能在另一个输出列表达式中使用。您只能在 GROUP BY、HAVING、ORDER BY 中引用它。
-
仅供参考
case是一个表达式而不是一个语句。 -
为什么在
date列上使用LEFT()?LEFT()是一个字符串函数,日期应该使用适当的日期/时间数据类型来存储。
标签: mysql sql sql-server case window-functions