浅谈sql数据库去重
关于sql去重,我简单谈一下自己的简介,如果各位有建议或有不明白的欢迎多多指出。
关于sql去重最常见的有两种方式DISTINCT和ROW_NUMBER(),了ROW_NUMBER()除了去重还有很多其他比较重要的功能,一会我给大家简单说说我自己在实际中用到的。
假如有张UserInfo表,如下图
现在我们要去掉完全重复的数据SELECT DISTINCT FROM dbo.UserInfo结果如下图
现在有个新的需求,要把名字为‘张三'的去重,也就是相同名字的只要一条数据,要是还用DISTINCT的话就很麻烦了。想必聪明的你已经想到此时是ROW_NUMBER()登场的时候了吧。我们只需执行这样一句话就万事大吉了SELECT FROM (SELECT ROW_NUMBER() OVER(PARTITION BY Name ORDER BY ID) AS RowId, FROM dbo.UserInfo) x WHERE x.RowId=1;虽然看起来有点长,很容易理解。现在执行的结果如下图
现在名字重复的数据只取了一条,而且是根据sql语句中的ORDER BY ID取的第一条,其中PARTITION BY后面跟的就是去重的字段,也许你想问为什么要加WHERE x.RowId=1呢,现在我们不加这个条件看看结果如何SELECT FROM (SELECT ROW_NUMBER() OVER(PARTITION BY Name ORDER BY ID) AS RowId, FROM dbo.UserInfo) x,如下图
现在我们已经看到,如果不加条件会把所有数据都查出来,所以RowId=1的数据就是去重后的数据;
ROW_NUMBER()除了可以去重还可以得到表的行号,现在我们只需一下语句SELECT ROW_NUMBER() OVER(ORDER BY ID) AS RowNum, FROM dbo.UserInfo,结果如下图
得到了所有的数据,而且还得到了每条数据的行号,其中数据的顺序可以根据ORDER BY ID调节,也就是说不去重的话就不用加PARTITION BY Name了,此功能在分页中用的也比较多,假如每页15条数据,分页时直接加条件RowNum Between 1 AND 15就行了。孤狼发表的博客很少,平时也比较懒,希望对大家有用。
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指