[英]Error while using columns achieved by aggregation of window function in case statement
我正在學習 SQL window 函數作為解決 leet 代碼平均工資、部門與公司、 https//leetcode.com/problemsv/
我使用 window 函數編寫了一個查詢
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,
AVG(amount) OVER (PARTITION BY LEFT(pay_date, 7)) AS com_avg
FROM salary s
INNER JOIN employee e
ON s.employee_id = e.employee_id
)
SELECT month, department_id, dep_avg, com_avg,
CASE WHEN dep_avg = com_avg THEN 'same' ELSE 'not same' END AS comparison
FROM cte;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.