Distinct:查询结果中,去掉了重复的行
1.语法:
     SELECT Distinct列名称 FROM 表名称;
     Distinct 必须放在Select搜索字段的最前面,否则SQL语句会报语法错误。

2.示例:

  • 2.1简单建立一个表,填入数据,执行SQL: Select * From [BlogDemo].[dbo].[People],结果如下:
  • 2.2 单独查询Name字段,执行SQL:Select Name From [BlogDemo].[dbo].[People],结果如下:
  • 2.3 上面查询结果的Name中"李丽"出现了3次,可以使用Distinct 关键字去重复,执行SQL:Select distinct Name From [BlogDemo].[dbo].[People],结果如下:
  • 2.4 上面查询结果中可以看到,Distinct 关键字去重复的作用实现了。如果在去重复Name的需求下还需要查询其他所有字段,会出现什么结果,执行SQL:Select distinct Name,Age,Address From [BlogDemo].[dbo].[People],结果如下:
  • 2.5 可以看到Distinct 关键字去重复作用并没有什么卵用,当 Distinct 作用在多个字段的时候,它只会将所有字段值都相同的记录“去重”掉,下面验证下,在表中在插入一条数据,如下:
  • 2.6 新插入数据第8条和第1条数据内容完全相同,再次执行SQL:Select distinct Name,Age,Address From [BlogDemo].[dbo].[People],结果如下:
  • 2.7 可以看到第8条数据被去重了,所以:当 Distinct 作用在多个字段的时候,它只会将所有字段值都相同的记录“去重”掉。在我们实际开发中,表中可能含有多条拥有相同某个字段的记录,如同示例中的Name字段,如果我们只需要相同Name的一个数据怎么办呢?


row_number() over() 函数:对结果集的输出进行编号。返回结果集分区内行的序列号,每个分区的第一行从 1 开始
1.语法:

ROW_NUMBER ( )   OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )

2.参数:
       PARTITION BY value_expression:将 FROM 子句生成的结果集划分为应用 ROW_NUMBER 函数的分区。 value_expression 指定对结果集进行分区所依据的列。 如果未指定 PARTITION BY,则此函数将查询结果集的所有行视为单个组。 (PARTITION BY作用相似Group By 分组的效果) 。
       order_by_clause:ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。 它是必需的。

3.示例:

  • 3.1 依旧使用上面的People表,先不加PARTITION BY分组的效果,执行SQL:Select *,ROW_NUMBER() OVER(Order By Id) as row From [BlogDemo].[dbo].[People],可以看到查询的结果集有8组,最后一列加入了row字段标识,结果如下:
  • 3.2 加入PARTITION BY分组的效果,执行SQL:Select *,ROW_NUMBER() OVER(Partition By Name Order By Id) as row From [BlogDemo].[dbo].[People],可以看到这次结果集只有4组,Name为"李丽"全部被标识为4组,结果如下:
  • 3.3 如果我们只取Name字段相同数据的一组,只要加一个筛选条件分组row为1即可,执行SQL:Select * From (Select *,ROW_NUMBER() OVER(Partition By Name Order By Id) as row From [BlogDemo].[dbo].[People]) p Where p.row=1,这时候结果集中Name不会出现相同的数据了,结果如下:

总结:
Distinct 和 row_number() over() 都有将数据去重复的作用,但Distinct 只能作用于单个字段查询结果集去重复,若针对多个字段查询的结果集去重复,需要所有字段都重复才可以去重复。row_number() over() 函数具有分组效果,无论是对于单字段还是多字段查询结果集去重复都可以做到。

转载于:https://www.cnblogs.com/wangqilong/p/10088350.html

SQL数据去重复 Distinct 和 row_number() over()相关推荐

  1. oracle 查的数据去重复数据,Oracle查询和过滤重复数据

    对数据库某些意外情况,引起的重复数据,如何处理呢? ----------------查重复: select * from satisfaction_survey s where s.as_side = ...

  2. mysql left join 去重_SQL LEFT JOIN 数据去重复

    SQL LEFT JOIN 数据去重复 2020-11-05 05:15:38.0 实例:查询当前用户参与过的流程实例(instance) 关系:每个实例 (instance)对应多个任务(task) ...

  3. 数据去重复_字典应用实例(每行每列都要去重复值)

    我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务.支持我,也为自己加油! 前面两节课中的去重复,不论是单张表里的去重复还是多张表里的去重 ...

  4. SQL server 去重复!要主键!要排序!

    在SQL里,似乎去重复又要主键还要排序,那是不可能实现的:但是我把不可能,变成了可能:我做了这么久开发这个问题一直困扰着我,今天把它给解决了,分享给大家学习: SELECT  * FROM    ( ...

  5. sql语句去重复数据方法是什么?sql语句去重复数据技巧

    如图所示,图标上有两个重复的数据,那么要过滤掉重复的数据需要怎么做的呢? 方法一: 用distinct过滤掉多余的数据. 例如:以下语语句 select distinct university fro ...

  6. DataTable 数据去重复

    ds.Tables[0].DefaultView.ToTable("q", true, "errorZone"); 第二个参数"True"  ...

  7. java mongo数据去重复_java – MongoSpark保存重复的密钥错误E11000

    我有一个Spark应用程序将RDD数据写入MongoDB,我得到一个MongoBulkWriteException.以前,我使用MongoDB标准驱动程序中的bulkWrite()方法,但我已经开始使 ...

  8. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

  9. List集合中数据用set集合去重复,用set集合去重复数据重写了equals还是没成功!

    [用set集合去重复数据,重写equals还是不成功的问题解决思路在文章最后] 需求描述: 因业务需要,通过复杂的代码逻辑从数据库取出数据放入List集合中,涉及多次从访问数据库取出数据放入List集 ...

最新文章

  1. 《深入理解 Java 内存模型》读书笔记(上)(干货,万字长文)
  2. spark on yarn相关脚本整理20210524
  3. K-means聚类算法详解
  4. java word批注_使用反射处理Java批注
  5. android+警告声音,android – 如何使用带有setAudioAttributes的警报音量播放铃声?
  6. paip.undefined reference to MainWindow::xxx from moc_mainwindow.cpp错误解决
  7. 作业(数组)---运行环境winTC(二)
  8. MQX4.0:MK60DZ10.h头文件GPIO模块…
  9. EfficientNet 简介
  10. 省赛前的做题计划记录
  11. 新至强Mesh架构解析之《西游大灌篮》
  12. MySQL分区(Partition)功能
  13. Wifi wpa_supplicant 到驱动的联系
  14. 【图像配准】多图配准/不同特征提取算法/匹配器比较测试
  15. MyBatis——》转义字符(大于,小于,大于等于,小于等于)
  16. 超级详细Ubuntu20.04.5系统下编译安装OpenCV with ffmpeg4.2.7、NVIDIA显卡驱动515、cuda11.5、cudnn8.3.3并编译使用darknet-yolov4
  17. C# 之 随机数应用 -- 洗牌算法
  18. Query意图识别分析
  19. ***测试第一弹:信息刺探
  20. 中考计算机考试作文,准备中考的作文4篇

热门文章

  1. 【python笔记】 for循环和while循环,break和continue语句
  2. FFmpeg示例程序合集-Git批量获取脚本
  3. FFMPEG列出DirectShow支持的设备
  4. live555学习笔记-RTSPClient分析
  5. live555学习笔记-RTSP服务运作
  6. openfiledialog选择文件会占用文件_铁皮文件柜的尺寸规格如何选择?选购花都文件柜要注意的问题...
  7. html5圆形提交按钮样式,HTML5 SVG带圆形进度条动画的提交按钮特效
  8. 台达plc自由口通讯_【台达PLC详解】附PLC功能总简介~
  9. java.sql.SQLException: null,message server: Host ora-rac2 is blocked because of many
  10. Linux在线下载安装MySQL8