empid deptid salary
----------- ----------- ---------------------------------------
1 10 5500.00
2 10 4500.00
3 20 1900.00
4 20 4800.00
5 40 6500.00
6 40 14500.00
7 40 44500.00
8 50 6500.00
9 50 7500.00
需求:根据部门分组,显示每个部门的工资等级。
SQL脚本:
SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank
FROM employee
empid deptid salary rank
----------- ----------- --------------------------------------- --------------------
1 10 5500.00 1
2 10 4500.00 2
4 20 4800.00 1
3 20 1900.00 2
7 40 44500.00 1
6 40 14500.00 2
5 40 6500.00 3
9 50 7500.00 1
8 50 6500.00 2
SQL脚本:
SELECT *
FROM
(SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) R
FROM employee) B
WHERE B.R =1
#只显示部门工资最高的
select *
from (
select name,学科,成绩,ROW_NUMBER() over (PARTITION by 学科 order by 成绩 desc) as num
from [XSBOOK].[dbo].[XKCJ]) T
where T.num <= 3 order by T.学科
name 学科 成绩 num
---------- ---------- ----------- --------------------
李四 数学 98 1
李四 数学 95 2
张三 数学 93 3
张三 英语 92 1
张三 英语 92 2
李四 英语 90 3
李四 语文 85 1
李四 语文 81 2
张三 语文 80 3
语法形式:ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)
解释:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。