create table employee (empid int ,deptid int ,salary decimal(10,2))
insert into employee values(1,10,5500.00)
insert into employee values(2,10,4500.00)
insert into employee values(3,20,1900.00)
insert into employee values(4,20,4800.00)
insert into employee values(5,40,6500.00)
insert into employee values(6,40,14500.00)
insert into employee values(7,40,44500.00)
insert into employee values(8,50,6500.00)
insert into employee values(9,50,7500.00)
select * from employee
with cte as
(
SELECT deptid,salary , Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee
)
---select * from cte
-----cte 的用法 相当于 一个表变量 ,把子查询的值赋予给我 cte个表 然后下面的操是针对 cte这个对象操作的,同理也是对 子查询的表操作。
-----只留每个部门工资最高的。 原理:部门内 排序不为1的都删除。
delete from cte where RANK<>1
---select * from employee