SQL基础(四)--SQL连接时去掉重复数据
⼀、关键词 DISTINCT ⽤于返回唯⼀不同的值,只可以在select中使⽤。
1.重复数据完全⼀样,⽤distinct
select distinct fromselect distinct * from table
根据字段去重⽤distinct
select distinct 列名称 from 表名称(对⼀列进⾏操作)
select distinct 列名称1,列名称2 from 表名称(对多列进⾏操作):对多列操作,表⽰选取多列都不重复的数据,相当于多列拼接的记录的整个⼀条记录 , 不重复的记录。
注意:(1). DISTINCT 必须放在第⼀个参数。(2).DISTINCT 表⽰对后⾯的所有参数的拼接取不重复的记录,相当于把 SELECT 表达式的项拼接起来选唯⼀值。
⼆、sysno列不同,sysno类型为int,⾃增字段,使⽤聚合函数max或其他
左连接重复数据表时:先过滤掉有表重复数据
SELECT * FROM table1 WITH(NOLOCK) A
LEFT JOIN table2 soEx ON A.SOSysNo=soEx.SOSysNo AND soEx.ExtensionName='IsConfirm'
WHERE soEx.SysNo IN(SELECT MAX(SysNo) FROM table WHERE SOSysno=A.SOSysNo)
三、使⽤row_number() over()和partition by给每⼀组添加⾏号
row_number() over()分组排序功能:
在使⽤ row_number() over()函数时候,over()⾥头的分组以及排序的执⾏晚于 where group by order by 的执⾏。
partition by ⽤于给结果集分组,如果没有指定那么它把整个结果集作为⼀个分组,它和聚合函数不同的地⽅在于它能够返回⼀个分组中的多条记录,⽽聚合函数⼀般只有⼀个反映统计值的记录。
select * from
(select *, ROW_NUMBER() over (partition by 分组字段(可多个) order by 排序字段) RowNum from 表) AS Result
where RowNum=1
先分组排序,再取出每组的第⼀条记录进⾏“去重”
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论