查询每个部门前2名的薪水
Query top 2 salaries in each department
查询:
select *, row_number() over (partition by b.[Dept Name] order by a.salary) as row_rank
from dbo.d as a
inner join dbo.e as b on a.[Dept id] = b.[Dept id]
row_rank < 3
错误:
Msg 102, Level 15, State 1, Line 7
Incorrect syntax near 'row_rank'.
我想查询以下列:
- table1:姓名,薪资,Dept_id
- table 2: Dept_id, Dept_Name
您不能在 where
子句中直接引用计算列。使用 CTE 或子查询。
with cte as (
select a.Name, a.salary a.[Dept id], b.Dept_Name
, row_number() over (partition by b.[Dept Name] order by a.salary) as row_rank
from dbo.d as a
inner join dbo.e as b on a.[Dept id] = b.[Dept id]
)
select *
from cte
where row_rank < 3;
您不需要两个表中的 [dept id],因为它们是相同的。还建议使用有意义的别名为您的表起别名,而不仅仅是 a、b 等
查询:
select *, row_number() over (partition by b.[Dept Name] order by a.salary) as row_rank
from dbo.d as a
inner join dbo.e as b on a.[Dept id] = b.[Dept id]
row_rank < 3
错误:
Msg 102, Level 15, State 1, Line 7 Incorrect syntax near 'row_rank'.
我想查询以下列:
- table1:姓名,薪资,Dept_id
- table 2: Dept_id, Dept_Name
您不能在 where
子句中直接引用计算列。使用 CTE 或子查询。
with cte as (
select a.Name, a.salary a.[Dept id], b.Dept_Name
, row_number() over (partition by b.[Dept Name] order by a.salary) as row_rank
from dbo.d as a
inner join dbo.e as b on a.[Dept id] = b.[Dept id]
)
select *
from cte
where row_rank < 3;
您不需要两个表中的 [dept id],因为它们是相同的。还建议使用有意义的别名为您的表起别名,而不仅仅是 a、b 等