浅谈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就行了。孤狼发表的博客很少,平时也比较懒,希望对大家有用。

(0)

相关推荐

  • SQL学习笔记五去重,给新加字段赋值的方法

    去掉数据重复 增加两个字段 alter TABLE T_Employee Add FSubCompany VARchar(20); ALTER TABLE T_Employee ADD FDepartment VARCHAR(20); 给新加的字段赋值 UPDATE T_Employee SET FSubCompany='Beijing',FDepartment='Development' where FNumber='DEV001'; UPDATE T_Employee SET FSubCom

  • 实例讲解临时处理去重 80w 数据时夯死现象

    近日,在对一张百万数据的业务表进行去重时,去重操作竟然夯住了.下面就来简单回忆一下. 1.查询业务表数据量,查看到总共有200多w条 SQL> select count(*) from tb_bj_banker_etl; 2552381 2.查询表内应该去掉的重复数据量,共80多w条 SQL> select count(*) from tb_bj_banker_etl where (id) in (select id from tb_bj_banker_etl group by id havi

  • SQL分组排序去重复的小实例

    复制代码 代码如下: SELECT    *FROM    (        SELECT            userid,            classid,            remark,            ROW_NUMBER () OVER (                PARTITION BY userid,                classid            ORDER BY                addtime DESC        

  • 浅谈sql数据库去重

    关于sql去重,我简单谈一下自己的简介,如果各位有建议或有不明白的欢迎多多指出. 关于sql去重最常见的有两种方式:DISTINCT和ROW_NUMBER(),当然了ROW_NUMBER()除了去重还有很多其他比较重要的功能,一会我给大家简单说说我自己在实际中用到的. 假如有张UserInfo表,如下图:   现在我们要去掉完全重复的数据:SELECT DISTINCT * FROM dbo.UserInfo结果如下图: 但是现在有个新的需求,要把名字为'张三'的去重,也就是相同名字的只要一条数

  • 浅谈mysql数据库中的换行符与textarea中的换行符

    1. mysql数据库中的换行符 在mysql数据库中, 其换行符为\n 即 char(10), 在python中为chr(10) 2. textarea中的换行符 textarea中的换行符为\r\n 3. web应用中换行符转换 以下是python django web的处理: # data为textarea获取的数据, 其中包括换行符`\r\n`, 以下是过渡处理 data = data.replace('\r\n', '\n') # 或 data = data.replace('\r\n

  • 浅谈sql连接查询的区别 inner,left,right,full

    --table1 表 ID NAME QQ PHONE 1 秦云 10102800 13500000 2 在路上 10378 13600000 3 LEO 10000 13900000 4 秦云 0241458 54564512 --table2 表 ID NAME sjsj gly 1 秦云 2004-01-01 00:00:00.000 李大伟 2 秦云 2005-01-01 00:00:00.000 马化腾 3 在路上 2005-01-01 00:00:00.000 马化腾 4 秦云 20

  • 浅谈Oracle数据库的建模与设计

    正在看的ORACLE教程是:浅谈Oracle数据库的建模与设计.要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似建立在危房之上,随着开发过程的不断深入,它要随时面临着各种难 以预料的风险,开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价.所以,一个良好的数据库设计是高效率的系统所必须的. 一.逻辑建模 数据库设计的方法因具体数据库而异,但是建模阶段的相同的,所以可以用一些通用的工具来进行

  • 浅谈MySQL数据库中日期中包含零值的问题

    默认情况下MySQL是可以接受在日期中插入0值,对于现实来说日期中的0值又没有什么意义.调整MySQL的sql_mode变量就能达到目的. set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION'; set @@session.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION'; 例子: 有一个用于记录日志的表 c

  • 浅谈laravel数据库查询返回的数据形式

    版本:laravel5.4+ 问题描述:laravel数据库查询返回的数据不是单纯的数组形式,而是数组与类似stdClass Object这种对象的结合体,即使在查询构造器中调用了toArray(),也无法转换成单纯的数组形式. 问题解析: (以上图片来源于laravel学院5.3版本到5.4版本的升级手册) 如上图所示:Laravel不再支持在配置文件中定制PDO的"fetch mode",取而代之,总是使用PDO::FETCH_OBJ,如果你仍然想要为应用定制fetch模式,需要监

  • 浅谈SQL Server 对于内存的管理[图文]

    理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) 对于计算机来说,存储体系是分层级的.离CPU越近的地方速度愉快,但容量越小(如图1所示).比如:传统的计算机存储体系结构离CPU由近到远依次是:CPU内的寄存器,一级缓存,二级缓存,内存,硬盘.但同时离CPU越远的存储系统都会比之前的存储系统大一个数量级.比如硬盘通常要比同时代的内存大一个数量级. 图1

  • 运维角度浅谈MySQL数据库优化(李振良)

    一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很多,比如慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等.当然,有测试工程师的团队

  • 浅谈SQL SERVER数据库口令的脆弱性

    跟踪了一下SQL SERVER数据库服务器的登录过程,发现口令计算是非常脆弱的,SQL SERVER数据库的口令脆弱体现两方面: 1.网络登陆时候的口令加密算法 2.数据库存储的口令加密算法. 下面就分别讲述: 1.网络登陆时候的口令加密算法 SQL SERVER网络加密的口令一直都非常脆弱,网上有很多写出来的对照表,但是都没有具体的算法处理,实际上跟踪一下SQL SERVER的登陆过程,就很容易获取其解密的算法:好吧,我们还是演示一下汇编流程: 登录类型的TDS包跳转到4126a4处执行 00

  • 浅谈SQL Server中的三种物理连接操作(性能比较)

    在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge Join,Hash Join这三种物理连接中的一种.理解这三种物理连接是理解在表连接时解决性能问题的基础,下面我来对这三种连接的原理,适用场景进行描述. 嵌套循环连接(Nested Loop Join) 循环嵌套连接是最基本的连接,正如其名所示那样,需要进行循环嵌套,嵌套循环是三种方式中唯一支持不等式连接的

随机推荐