精华内容
下载资源
问答
  • 一般是采用 distinct 或者 group by 进行去重操作 但是!!! 该用哪一个呢? distinct和group by的用法 俗话说:“知己知彼”,先了解它们的用法,才能知道在什么情况下用哪个 已经知道用法的,可以直接跳过这一节...


    问题抛出

    当一个表中有重复数据时,该怎么在查询时去重呢?
    表中有重复数据
    一般是采用 distinct 或者 group by 进行去重操作
    但是!!!
    该用哪一个呢?

    distinct和group by的用法

    俗话说:“知己知彼”,先了解它们的用法,才能知道在什么情况下用哪个
    已经知道用法的,可以直接跳过这一节啦~

    distinct

    select distinct 字段[,字段2,...] from
    • distinct可以对一个字段或多个字段进行去重
    • distinct必须在select后的首位
    • distinct后面的所有字段都会作为去重的字段,即使字段由()括起来
    -- 只有field1和field2都重复时,才认为其是重复数据
    -- 例如上图的第一条和第十条数据就是重复数据
    select distinct field1,field2 from testDistinct;
    select distinct (field1),field2 from testDistinct;
    

    运行结果(第一条和第二条的运行结果相同):
    只是将第十条数据去掉了,field1字段还是有多个重复数据
    上边代码的运行结果
    你不会还以为第二条语句的执行结果是这个吧(偷笑.jpg):
    原以为第二条代码的执行结果

    group by

    select * fromGROUP BY 字段[,字段2,...];
    
    • group by可以对一个字段或多个字段进行分组(变相去重)
    • 查询的字段和分组的字段互不影响,即可以查询所有字段,但只对某个字段进行去重

    distinct也可以实现这个效果,只是需要子查询等方式
    将distinct查询的去重后的数据作为条件再次查询表,得到想要的字段

    group by本身是分组的,它的 “不务正业” 也说明了 “代码是死的,人是活的” 这句话,嘿嘿
    它能够去重,是利用了它 只显示同组的第一条数据 这个特性
    例如:

    select * from testDistinct GROUP BY field1;
    

    结果:
    执行结果
    发现:field1为1的数据本来有很多条,但是只剩下第一条数据。

    用哪个?

    了解了 distinct 和 group by 的用法,就该聊聊怎么用了
    两者各有千秋

    • distinct适合各种重复数据去重,只是查询显示数据和去重不能同时做。毕竟有时候我想要看到的字段不全是需要查重的字段
    • group by适合做分类统计
      – 例如一个班级表,一个班级对应多个学生,我想要知道有多少个班级
      – 也适合查询和去重一步到位,但是一般要以两个字段为条件,毕竟group by只会显示一组里的一条数据,你需要做的是让group by认为每条正常不重复的数据就是一组

    举个例子吧~
    下面是学校的某张表,记录了每个年级有几个班
    第5条是重复数据(失败数据,没有任何用)
    需求:
    把重复数据(第5条)去掉

    表数据

    select type_id, type_name, sonType_id, sonType_name from testTable GROUP BY type_id,sonType_id;
    

    小弟无能,distinct的语句没法写出来,有能实现的,可以留言,感谢ATA

    展开全文
  • SQL语句distinct去重使用方法

    千次阅读 2019-08-15 16:08:57
    很多时候数据库查出来的数据会出现重复的情况。 不过这些情况用distinct就可以解决。 表A: id name 1 a ...1.对于单列的去重 select distinct name from A 执行之后的结果: nam...

    很多时候数据库查出来的数据会出现重复的情况。
    不过这些情况用distinct就可以解决。

    表A:

    id name
    1 a
    2 b
    3 c
    4 b
    1 a

    表B:

    province city
    河北省 石家庄市
    河北 省石家庄市

    1.对于单列的去重

    select distinct name from A

    执行之后的结果:

    name
    a
    b
    c

    2.对于多列的去重

    实例1:

    select distinct id,name from A

    执行之后的结果如下:

    id name
    1 a
    2 b
    3 c
    4 b

    实例2:

    select distinct province,city from B

    执行之后的结果:

    province city
    河北省 石家庄市
    河北 省石家庄市

    由此可见,distinct去重是根据每一列进行去重,作用于province 和 city 两个字段,不是province 和 city 两列“字符串拼接”后再去重的。


    distinct规范

    distinct必须写在字段前面。

    select id,name distinct from A

    这样写就会报错。

    展开全文
  • 点击上方SQL数据库开发,关注获取SQL视频教程SQL专栏SQL基础知识汇总SQL高级知识汇总我们知道DISTINCT可以去掉重复数据,GROUP BY在分组后也会去掉重复数据,那这两个关键字在去掉重复数据时的效率,究竟谁会更高...

    点击上方SQL数据库开发,关注获取SQL视频教程

    SQL专栏

    SQL基础知识汇总

    SQL高级知识汇总

    我们知道DISTINCT可以去掉重复数据,GROUP BY在分组后也会去掉重复数据,那这两个关键字在去掉重复数据时的效率,究竟谁会更高一点?

    1.使用DISTINCT去掉重复数据

    我们先看下面这个例子:

    SELECT DISTINCT UnitPrice
    FROM [Sales].[SalesOrderDetail]
    WHERE UnitPrice>1000;

    执行完之后的结果如下:

    cef384d87670d19bcf148d31eccf3dd7.png

    接下来,我们将这个表里的数据增大到194万条,再重复上面的实验。

    --将表SalesOrderDetail插入到一张物理表中

    SELECT * INTO Sales.Temp_SalesOrder
    FROM [Sales].[SalesOrderDetail] ;

    --通过新增的物理表进行自循环插入3次,将数据增加到1941072行

    DECLARE @i INT;
    SET @i=0
    WHILE @i<4
    BEGIN
    --这里没有将SalesOrderDetailID这个自增长的放在列中,是为了让系统自动填充不同的数字进去,保证唯一性。
    INSERT INTO Sales.Temp_SalesOrder
    (SalesOrderID,CarrierTrackingNumber,OrderQty,ProductID,SpecialOfferID,
    UnitPrice,UnitPriceDiscount,LineTotal,rowguid,ModifiedDate)

    SELECT
    SalesOrderID,CarrierTrackingNumber,OrderQty,ProductID,SpecialOfferID,
    UnitPrice,UnitPriceDiscount,LineTotal,NEWID(),ModifiedDate
    FROM Sales.Temp_SalesOrder
    SET @i=@i+1;
    END;

    SELECT COUNT(1) FROM Sales.Temp_SalesOrder;

    (提示:可以左右滑动代码)

    将SalesOrderDetailID的自增长属性取消掉之后,插入1000条自身的数据,这样我们就可以得到1000条重复的SalesOrderDetailID,相比1942072条记录占比很小了

    如下图,将自增长标识的换成后即可插入了。

    dd668240b7518daa441ab68f12c49801.png

    INSERT INTO sales.Temp_Salesorder
    SELECT TOP 1000 * FROM sales.Temp_Salesorder;

    数据插入完整后,我们在将上一讲的内容重复一下,看看效果如何?

    A.在没建索引的情况下,我们只查询UnitPrice这一列

    SELECT UnitPrice FROM Sales.Temp_SalesOrder ;

    我们看一下执行情况:

    ea04b1016227bef33f85d4a53e908e97.png

    接下来是鉴证奇迹的时刻了,我们加DISTINCT在UnitPrice前面试试

    SELECT  DISTINCT  UnitPrice FROM sales.Temp_Salesorder;

    2bea4c8857269d1697f79c20133b07ed.png

    和之前的实验结果一致,在执行时间没有多大差别的情况下,分析时间成倍的减少了。

    B.当SalesOrderDetailID取消掉自增长属性后就和普通列一样了。

    我们来重复上面的步骤:

    SELECT   SalesOrderDetailID FROM sales.Temp_Salesorder

    执行完后结果如下:

    27dc4f94b7ac189a84f63349f0da5a99.png

    与上面的UnitPrice没使用DISTINCT情况基本一致。

    然后我们给SalesOrderDetailID加上DISTINCT后会怎么样呢?

    SELECT DISTINCT  SalesOrderDetailID
    FROM sales.Temp_Salesorder

    我们可以看到如下执行情况:

    d888beb5cbe4939bed4913d34799d716.png

    从上图可以看到,DISTINCT已经排除了1000条记录,但是在执行时花的时间比没加DISTINCT更久了。

    通过上述两个实验,我们可以得出这样一条结论:在重复量比较高的表中,使用DISTINCT可以有效提高查询效率,而在重复量比较低的表中,使用DISTINCT会严重降低查询效率。所以并不是所有的DISTINCT都是降低效率的,当然你得提前判断数据的重复量。

    2.GROUP BY与DISTINCT去掉重复数据的对比

    GROUP BY与DISTINCT类似,经常会有一些针对这两个哪个效率高的争议,今天我们就将这两个在不同重复数据量的效率作下对比。

    A.重复数据量多的情况下,对UnitPrice进行去重

    SELECT  DISTINCT  UnitPrice FROM sales.Temp_Salesorder;
    SELECT  UnitPrice FROM sales.Temp_Salesorder GROUP BY UnitPrice;

    将上述两条语句一起执行,结果如下:

    6a0105c213bc812ad10bf4820f8dc4f1.png

    可以看出两条语句对应的执行时间GROUP BY比DISTINCT效率高一点点。

    B.重复数据量少的情况下,对SalesOrderDetailID进行去重

    SELECT  DISTINCT SalesOrderDetailID FROM sales.Temp_Salesorder
    SELECT   SalesOrderDetailID FROM sales.Temp_Salesorder
    GROUP BY SalesOrderDetailID

    也是同时执行上述两条语句,其结果如下:

    14e5c9e17c10f30624370ca983f40896.png

    作者对上述语句同时执行多次,针对重复量多的UnitPrice,GROUP BY总的处理效率比DISTINCT高一点点,但是针对重复量低的SalesOrderDetailID,DISTINCT就比GROUP BY快一点了,而如果随着整体数据量的增加,效果会越来越明显。

    今天的内容就讲到这里,小伙伴可以动手尝试一下。如有不明白的可以在下方留言一起探讨。

    ——End——

    后台回复关键字:1024,获取一份精心整理的技术干货后台回复关键字:进群,带你进入高手如云的交流群。推荐阅读

    一款免费比Navicat还要好用,功能强大的数据库管理工具

    GitHub上最励志的计算机自学教程

    刚刚用华为鸿蒙跑了个“hello world”!

    SQL学习路线图,首次公开

    思科前员工删库跑路,损失达 1600 多万

    孙悟空无姓无名的时候,阎王生死簿是怎么写的呢?

    这是一个能学到技术的公众号,欢迎关注069e75472d6cda5ea817b0fb6e03f49f.png点击「」了解SQL训练营
    展开全文
  • SQL语句distinct的多个字段去重问题

    万次阅读 热门讨论 2018-09-13 14:52:25
    select distinct name, id from table 或者 select name,id from table group by name 像这样是错误的写法,distinct不起作用的 曲线救国写法: select name,id from table where id in (  select min(id) ...

    经典例子

    select distinct name, id from table

    或者

    select name,id from table group by name

    像这样是错误的写法,distinct不起作用的

    曲线救国写法:

    select name,id from table  where id in (

          select min(id) from table group by name

    )

    思想:将需要去重的字段添加到where条件中,取出唯一id

              然后就可以获得去重之后的两个字段了

              不过我这边是你需要去重一个字段,展示两个字段的情况

     

    还可以看如下文章

    https://blog.csdn.net/yz357823669/article/details/78794050

    https://blog.csdn.net/djun100/article/details/10452165

    展开全文
  • sql语句如何去重保留一条记录啊我有一个表,里面有一列里的数据有重复,可能重复有两条或以上,有的只有一条记录,但是sql语句如何实现把重复的删掉并且保留一条记录?------最佳解决方案--------------------1、...
  • sql-distinct去重语句

    千次阅读 2018-10-29 15:14:12
    select distinct(name) from exercise; select distinct(name),myorder from temp.exercise; select distinct(name),myorder,time from temp.exercise; select distinct name,myorder,time from temp....
  • sql语句distinct去重

    2020-07-24 15:56:07
    关于去重,首先我想到的是distinct关键字 1,作用于单列去重 SELECT distinct(wg.id) FROM ws_goods wg LEFT JOIN ws_good_price gp ON gp.goodsId = wg.id WHERE wg.goodsCategoryOneId = 74 AND wg....
  • 比如有以下数据表 name type aaa 1,2,3,1 bbb 2,2,3 我想把type里出现的重复数据去除,得到 name type aaa 1,2,3 bbb 2,3
  • 1、查询数组并去重用distinct()函数 select distinct(字段名) from 表名 2、count(*) 和 sum() (1)、count(*) 函数是用于统计数据的条数 select count(*) as count from A where id>0 (2)、sum() 统计某个...
  • sql语句去重sql语句通过DISTINCT关键字去重, 用于返回唯一不同的值。DISTINCT关键字需要搭配SELECT 语句使用,语法为SELECT DISTINCT 列名称 FROM 表名称。如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就...
  • sql语句distinct的用法

    2019-05-18 22:40:39
    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同...(比如订单或者是想要查看所有订单中的用户id,此时一个用户可能有多个纪录,所以用与去重,不然通过其他方法再去重很麻烦) ...
  • url 在表中具有唯一性;由于定时任务的多进程/代码的多...SELECT COUNT(1) FROM test_error_tmpUNION ALLSELECT COUNT(DISTINCT url) FROM test_error_tmp;COUNT(1)4097240910差62SELECT * FROM (SELECT COUNT(1) ...
  • SQL DISTINCT 去重

    千次阅读 2019-04-10 23:01:11
    SQL DISTINCT 去重 DISTINCT : 去重复,去掉重复的数据,在查询语句中使用。 如图: user表 将uid去重后 SELECT DISTINCT uid , name FROM `user`
  • 比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。select distinct name from table得到的结果是:nameac好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:s...
  • distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,...2.只能在SELECT 语句中使用,不能在 INSERT, DELETE, UP...
  • Oracle数据去重(不是distinct

    千次阅读 2016-09-27 11:37:42
    常用的Sql * Plus 命令: -show user;//显示当前进行连接的用户名 -show parameter db_name;//显示当前操作的数据库名 -conn [ect];//连接数据库 -desc[ribe] 对象名;//查看指定对象的详细信息 第二章:简单语句...
  • 使用SQL server 数据库也有好多年,现在还在用!...(1)查询语句数据,进行去重 (估计很多都懂) select distinct * from table (2)删除表重复记录(所有字段重复,记录保留1条) ,使用临时表方式: ...
  • SQL 去重不用distinct如何实现?

    千次阅读 2017-07-10 20:48:27
    1、今日面试问到SQL语句去重关键字?一时只想起来distinct【果然一定要注意总结啊 答:用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会...
  • 测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 我们使用select进行数据查询时是会返回所有匹配的记录,如果表中某些字段没有做唯一性约束,那么这些字段的值就可能...
  • 1.查询指定字段select c_id,c_age,c_name from t_student;select c_id as 编号,c_name as 姓名,c_age...2.去重查询select distinct c_address from t_studentselect distinct c_address,c_name from t_student3.比较...
  • sql语句按照字段去重

    千次阅读 2019-08-01 11:37:27
    DISTINCT sql语句按照字段去重 引用自:https://www.w3school.com.cn/sql/sql_distinct.asp 2019年8月1日 11:37:26
  • distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,...2.只能在SELECT 语句中使用,不能在 INSERT, DELETE, UP...
  • sql语句去重

    万次阅读 2018-07-27 16:03:41
    这是最简单的一种情况,用关键字distinct就可以去掉 example: select distinct * from table(表名) where (条件)   CREATE TABLE 临时表 AS (select distinct * from 表名);  drop table 正式表;  insert...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 400
精华内容 160
关键字:

去重sql语句distinct