簡體   English   中英

在 case 語句中使用通過聚合 window function 實現的列時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM