请解释这句sql!关于去重的,从语法角度详细解释: x,over,partition!特别是where前的x!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请解释这句sql!关于去重的,从语法角度详细解释: x,over,partition!特别是where前的x!相关的知识,希望对你有一定的参考价值。

delete x from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1

表结构

参考技术A row_number() over (partition by EmployeeName order by empId)

这表示根据EmployeeName分组 然后再在每个EmployeeName内部进行排序标号,我一般把这叫做分组内部排序标号,而group by一般是与汇总函数合用,会对原数据进行汇总,这样的结果会使数据行数变少,
举个简单的例子
cl1 cl2
a 1
a 2
a 3
a 3
b 1
b 1
select cl1,sum(cl2) su from table1 group by cl1;
cl1 su
a 9
b 2
select cl1,cl2,sum(cl2) over(partition by cl1) su from table1 group by cl1;
cl1 cl2 su
a 1 9
a 2 9
a 3 9
a 3 9
b 1 2
b 1 2
select cl1,cl2,row_number() over(partition by cl1 order by cl2) row_num from table1 group by cl1;
cl1 cl2 row_num
a 1 1
a 2 2
a 3 3
a 3 4
b 1 1
b 1 2
这个例子能够说明了吧,你可以百度group by与partition by的区别,上述为我自己学习的想法,如有错误请见谅
x只是一个别名吧,就是代替你的查询
(
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
)的内容,本回答被提问者采纳
参考技术B row_number() over (partition by EmployeeName order by empId)

根据EmployeeName分组
order by empId 排序追问

还要细分语法讲解。那么你说是分组为什么不是group by?

以上是关于请解释这句sql!关于去重的,从语法角度详细解释: x,over,partition!特别是where前的x!的主要内容,如果未能解决你的问题,请参考以下文章

关于SQL去重的几种方法

关于选择排序并去重的几种算法分析

9种JavaScript数组去重的高阶方法

这些语法有啥区别,请详细解释一下?

SQL server 中 关于@和declare的解释,请看详细

serv_addr.sin_addr = *((struct in_addr *)host->h_addr);请高手详细解释一下这句话?