我有以下代码(可以正常工作):
with t as
(select *,
dense_rank() over (partition by departmentId order by salary desc) as r
from employee
)
select d.name as Department, t.name as Employee, t.Salary
from (t left join department d on t.departmentid=d.id)
where
t.r <=3
我不明白的是,如果我尝试为连接表提供别名,为什么会出现错误:
with t as
(select *,
dense_rank() over (partition by departmentId order by salary desc) as r
from employee
)
select d.name as Department, t.name as Employee, t.Salary
from (t left join department d on t.departmentid=d.id) as x
where
x.r <=3
我知道别名不是必需的,但我不明白为什么它会出错。
我希望代码能够与别名一起正常工作
(t left join department d on t.departmentid=d.id)
不是一个表格引用,它是两个表格引用。 t
和left join department d on t.departmentid=d.id
。给它们统一起一个别名是没有意义的,t.r
和d.name
是明确的。
括号是允许的,但不是必需的,并且暗示不存在的分组。摆脱它们更简单。
with t as (
select
*,
dense_rank() over (
partition by departmentId
order by salary desc
) as r
from employee
)
select
d.name as Department,
t.name as Employee,
t.Salary
from t
left join department d on t.departmentId=d.id
where t.r <=3