精华内容
下载资源
问答
  • sql 去除重复distinct详解

    千次阅读 2018-12-13 16:18:44
     在sql数据查询中,有时候,数据可能会出现很多重复相同的数据,但是,我们有时候只是想要查询出不同的数据,把多余重复的数据过滤掉,可以通过使用distinct来实现过滤重复数据,返回唯一的数据。 1.案例详解: ...

    前言:

           在sql数据查询中,有时候,数据可能会出现很多重复相同的数据,但是,我们有时候只是想要查询出不同的数据,把多余重复的数据过滤掉,可以通过使用distinct来实现过滤重复数据,返回唯一的数据。

    1.案例详解:

      数据表a1如图:

    1).单一字段去除多余重复数据

    代码:select distinct a_name from a1

    返回结果图:

    说明:对单一一个字段使用distinct去除重复值时,会过滤掉多余重复相同的值,只返回唯一的值。

    2).多个字段同时去除多余重复数据:

    代码:select distinct a_id,a_name from a1

    返回结果图:

    说明:对多个字段同时使用distinct去除重复值时,distinct字段必须放在第一个字段前面,不能放在其他字段的后面。既distinct必须放在select 后面,第一个字段的前面。同时,使用distinct多个字段去除重复数据时,必须满足各行中各列所对应的值都相同才能去除重复值,如果有其中一列的值不相同,那就表示这些数据不是重复的数据,不会过滤掉。结果图中,虽然a_name列中都有小白,但是a_id列中小白对应的各自id的值不同,表示这些数据不是重复的,所以不会过滤掉,而能过滤掉的只有a_name列为小白,a_id列值为1的那2条数据,只返回唯一的一条a_id为1,a_name为小白的数据。

    展开全文
  • 本文将详细介绍oracle sql 去重复记录不用distinct如何实现,需要了解的朋友可以参考下
  • sql去重复操作详解SQLdistinct的用法

    万次阅读 多人点赞 2018-01-10 09:04:05
    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: 表B: 1.作用于单列 select distinct name from A ...

    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。

    表A:

    表B:

    1.作用于单列

    select distinct name from A

    执行后结果如下:

    2.作用于多列

    示例2.1

    select distinct name, id from A

    执行后结果如下:

    实际上是根据name和id两个字段来去重的,这种方式Access和SQL Server同时支持。

    示例2.2

    select distinct xing, ming from B

    返回如下结果:

    返回的结果为两行,这说明distinct并非是对xing和ming两列“字符串拼接”后再去重的,而是分别作用于了xing和ming列。

    3.COUNT统计

    select count(distinct name) from A;	  --表中name去重后的数目, SQL Server支持,而Access不支持

    count是不能统计多个字段的,下面的SQL在SQL Server和Access中都无法运行。

    select count(distinct name, id) from A;

    若想使用,请使用嵌套查询,如下:

    select count(*) from (select distinct xing, name from B) AS M;

    4.distinct必须放在开头

    select id, distinct name from A;   --会提示错误,因为distinct必须放在开头

    5.其他

    distinct语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的。例如,假如表A有“备注”列,如果想获取distinc name,以及对应的“备注”字段,想直接通过distinct是不可能实现的。但可以通过其他方法实现关于SQL Server将一列的多行内容拼接成一行的问题讨论

     

    distinct这个关键字用来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。
    下面先来看看例子:

    table表

    字段1     字段2
       id        name
       1           a
       2           b
       3           c
       4           c
       5           b

    库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。

    比如我想用一条语句查询得到name不重复的所有数据,那就必须

    使用distinct去掉多余的重复记录。

    select distinct name from table
    得到的结果是: 

    ---------- 

    name
       a

       c

    好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:

    select distinct name, id from table

    结果会是:

    ---------- 

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

    distinct怎么没起作用?作用是起了的,不过他同时作用了两个

    字段,也就是必须得id与name都相同的才会被排除

    我们再改改查询语句:

    select id, distinct name from table

    很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。

    --------------------------------------------------------

    下面方法可行:

    select *, count(distinct name) from table group by name

    结果:

       id name count(distinct name)
       1 a 1
       2 b 1
       3 c 1

    最后一项是多余的,不用管就行了,目的达到

    group by 必须放在 order by 和 limit之前,不然会报错



    distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,接下来通过本篇文章给大家分享SQL中distinct的用法,需要的朋友可以参考下

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只 用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的,所以浪费了我大量时间。

    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。

    表A:

    示例1

    复制代码 代码如下:

    select distinct name from A

    执行后结果如下:

     

    示例2

    复制代码 代码如下:

    select distinct name, id from A

    执行后结果如下:

    实际上是根据“name+id”来去重,distinct同时作用在了name和id上,这种方式Access和SQL Server同时支持。

    示例3:统计

    复制代码 代码如下:

    select count(distinct name) from A;   --表中name去重后的数目, SQL Server支持,而Access不支持
    select count(distinct name, id) from A;   --SQL Server和Access都不支持

    示例4

    复制代码 代码如下:

    select id, distinct name from A;   --会提示错误,因为distinct必须放在开头

    在使用mysql时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段,例如有如下表user:


    用distinct来返回不重复的用户名:select distinct name from user;,结果为:


    这样只把不重复的用户名查询出来了,但是用户的id,并没有被查询出来:select distinct name,id from user;,这样的结果为:


    distinct name,id 这样的mysql 会认为要过滤掉name和id两个字段都重复的记录,如果sql这样写:select id,distinct name from user,这样mysql会报错,因为distinct必须放在要查询字段的开头。

    所以一般distinct用来查询不重复记录的条数。

    如果要查询不重复的记录,有时候可以用group by :

    select id,name from user group by name;

    1 前言

    在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在检索的时候,显示多条记录,这就有违咱们的初衷啦!因此,为了避免这种情况的发生,咱们就需要进行“去重”处理啦,那么何为“去重”呢?说白了,就是对同一字段让拥有相同内容的记录只显示一条记录。

    那么,如何实现“去重”的功能呢?对此,咱们有两种方式可以实现该功能。

    • 第一种,在编写 select 语句的时候,添加 distinct 关键词;
    • 第二种,在编写 select 语句的时候,调用 row_number() over() 函数。

    以上两种方式都可以实现“去重”功能,那两者之间有何异同呢?接下来,作者将给出详细的说明。

    2 distinct

    在 SQL 中,关键字 distinct 用于返回唯一不同的值。其语法格式为:

    SELECT DISTINCT 列名称 FROM 表名称
        
    • 1

    假设有一个表“CESHIDEMO”,包含两个字段,分别 NAME 和 AGE,具体格式如下:

    CESHIDEMO

    观察以上的表,咱们会发现:拥有相同 NAME 的记录有两条,拥有相同 AGE 的记录有三条。如果咱们运行下面这条 SQL 语句,

    /**
    * 其中 PPPRDER 为 Schema 的名字,即表 CESHIDEMO 在 PPPRDER 中
    */
    
    select name from PPPRDER.CESHIDEMO
        
    • 1
    • 2
    • 3
    • 4
    • 5

    将会得到如下结果:

    name

    观察该结果,咱们会发现在以上的四条记录中,包含两条 NAME 值相同的记录,即第 2 条记录和第 3 条记录的值都为“gavin”。那么,如果咱们想让拥有相同 NAME 的记录只显示一条该如何实现呢?这时,就需要用到 distinct 关键字啦!接下来,运行如下 SQL 语句,

    select distinct name from PPPRDER.CESHIDEMO
        
    • 1

    将会得到如下结果:

    distinct

    观察该结果,显然咱们的要求得到实现啦!但是,咱们不禁会想到,如果将 distinct 关键字同时作用在两个字段上将会产生什么效果呢?既然想到了,咱们就试试呗,运行如下 SQL 语句,

    select distinct name, age from PPPRDER.CESHIDEMO
        
    • 1

    得到的结果如下所示:

    nameandage

    观察该结果,哎呀,貌似没有作用啊?她将全部的记录都显示出来了啊!其中 NAME 值相同的记录有两条,AGE 值相同的记录有三条,完全没有变化啊!但事实上,结果就应该是这样的。因为当 distinct 作用在多个字段的时候,她只会将所有字段值都相同的记录“去重”掉,显然咱们“可怜”的四条记录并不满足该条件,因此 distinct 会认为上面四条记录并不相同。空口无凭,接下来,咱们再向表“CESHIDEMO”中添加一条完全相同的记录,验证一下即可。添加一条记录后的表如下所示:

    添加一条记录

    再运行如下的 SQL 语句,

    select distinct name, age from PPPRDER.CESHIDEMO
        
    • 1

    得到的结果如下所示:

    nameandage

    观察该结果,完美的验证了咱们上面的结论。

    此外,有一点需要大家特别注意,即:关键字 distinct 只能放在 SQL 语句中所有字段的最前面才能起作用,如果放错位置,SQL 不会报错,但也不会起到任何效果。

    3 row_number() over()

    在 SQL Server 数据库中,为咱们提供了一个函数 row_number() 用于给数据库表中的记录进行标号,在使用的时候,其后还跟着一个函数 over(),而函数 over() 的作用是将表中的记录进行分组和排序。两者使用的语法为:

    ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2)
        
    • 1

    意为:将表中的记录按字段 COLUMN1进行分组,按字段 COLUMN2 进行排序,其中

    • PARTITION BY:表示分组
    • ORDER BY:表示排序

    接下来,咱们还用表“CESHIDEMO”中的数据进行测试。首先,给出没有使用 row_number() over() 函数时查询的结果,如下所示:

    添加一条记录

    然后,运行如下 SQL 语句,

    select  PPPRDER.CESHIDEMO.*, row_number() over(partition by age order by name desc) from PPPRDER.CESHIDEMO
        
    • 1

    得到的结果如下所示:

    函数

    从上面的结果可以看出,其在原表的基础上,多了一列标有数字排序的列。那么反过来分析咱们运行的 SQL 语句,发现其确实按字段 AGE 的值进行分组了,也按字段 NAME 的值进行排序啦!因此,函数的功能得到了验证。

    接下来,咱们就研究如何用 row_number() over() 函数实现“去重”的功能。通过观察上面的结果,咱们可以发现,如果以 NAME 分组,以 AGE 排序,然后再取每组的第一个记录或许就可以实现“去重”的功能啊!那么试试看,运行如下 SQL 语句,

    /*
    * 其中 rn 表示最后添加的那一列
    */
    
    select * from 
    (select  PPPRDER.CESHIDEMO.*, row_number() over(partition by name order by age desc) rn from PPPRDER.CESHIDEMO)
    where rn = 1
        
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行后,得到的结果如下所示:

    rn

    观察以上的结果,我们发现,哎呀,数据“去重”的功能一不小心就被咱们实现了啊!不过很遗憾,如果咱们细心的话,会发现一个很不爽的事情,那就是在执行以上 SQL 语句进行“去重”的时候,有一条 NAME 值为“gavin”、AGE 值为“18”的记录被过滤掉了,但是在现实生活会中,同名不同年龄的事情太正常了。

    4 总结




    展开全文
  • sql 显示重复数据 去重复 distinct

    千次阅读 2019-07-12 13:01:57
    sql 显示重复数据 select id from A where id in (select id from A group by id having count(1) >=2) ---- select id,count(1) 重复次数 from A group by id having count(1)>1; 查询出来的结果都是id...

    ===

    sql 显示重复数据

     

    select id from A
    where id in (select id from A group by id having count(1) >= 2)

    ----

    select id,count(1) 重复次数 from A group by id having count(1)>1;
    查询出来的结果都是id重复的,重复次数 中的数值就是重复了多少次。

    ==

      sql  去重复  distinct

    select distinct name from A

    去重复的name

    ==

    展开全文
  • 查询要求 在数据库中查询存在课程分数在90分以下的同学的学号 数据库表 SQL代码 SELECT DISTINCT StudentNumber FROM SC ...使用SELECT DISTINCT来去掉重复的记录,如果没有DISTINCT查询结果为 ...

    查询要求

    在数据库中查询存在课程分数在90分以下的同学的学号

    数据库表在这里插入图片描述

    SQL代码

    SELECT DISTINCT StudentNumber FROM SC
    WHERE Score < 90 ;
    

    查询结果

    在这里插入图片描述

    总结

    使用SELECT DISTINCT来去掉重复的记录,如果没有DISTINCT,查询结果为
    在这里插入图片描述

    展开全文
  • sqlserver 去重查询distinct

    千次阅读 2017-10-19 15:55:41
    sqlserver
  • Distinct查询结果中,去掉了重复的行 1.语法: &amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;SELECT Distinct列名称 FROM 表名称; &amp;...
  • 一、distinct是什么? distinct是mysql去重复关键字。 二、使用规则 1.distinct关键字必须在select后面第一位 表里所有数据的去重复 select distinct comptemplate.* ...2.distinct去重复的依据 distin
  • SELECT distinct * FROM StandardProduct
  • SQL:DISTINCT 去除重复

    万次阅读 多人点赞 2015-12-26 23:53:13
    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: 表B: 1.作用于单列 select distinct name from A ...
  • sql 查询去掉重复记录— distinct用法

    千次阅读 2018-08-23 00:06:44
    数据库查询时,列出不重复记录,使用distinct, 例如:select distinct 字段名 from 表名 。对于查询多个字段同时不重复记录同样的道理,例如:select distinct 字段名1,字段名2,字段名3 from 表名...
  • SQLserver Distinct去重复的数据

    万次阅读 2019-03-09 16:13:29
    Distinct去重复 我们在使用Server 语句查询数据库的时候有时需要查询出很多重复的值,但是我们又不希望它出现重复的数据给我们那么这个时候就可以使用Distinct关键字来去重复这个操作 如下图: 图中查询所有表部门...
  • SQL去重参考 https://blog.csdn.net/haibo0668/article/details/83827340
  • SQLdistinct显示多个字段,多列问题,去重复 select distinct on (Name,number) Name ,number,score from student 这段主要对两列name,number,去重,显示后面Name ,number,score 很实用。 ...
  • sql---distinct显示多个字段,去重复

    万次阅读 2017-05-13 16:59:40
    众所周知,distinct可以列出不重复的记录,对于单个字段来说distinct使用比较简单,但是对于多个字段来说,distinct使用起来会使人发狂。而且貌似也没有见到微软对distinct使用多字段的任何说明。下面就提供了一种...
  • sql distinct 去重复 (mysql)

    千次阅读 2017-03-01 12:35:29
    DISTINCT 去重复 (运动扭伤腰。。。悲伤。。。 (▼ _ ▼) )首先,例如我们的表: 首先观察表: 其中第二行和第三行和第八行的name1的只是重复的,但第八行的age1确是12,与第二行和第三行不同。 第五行和第六...
  • SELECT DISTINCT 语句用于返回唯一不同的值。  SELECT DISTINCT 语法: SELECT DISTINCT column_name,column_name FROM table_name; 使用情况:想去除表中重复数据(每行完全相同或者某一列某几列相同) ...
  • 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
  • distinct使SQL查询除去重复的字段

    千次阅读 2014-02-17 08:35:40
    distinct使SQL查询除去重复的字段 sql语句去重,distict的用法: select distinct 字段名 from [表名] Sql = "Select * from (Select max(可输入顺序的字段) as indexfield,要去重复字段名 From 数据表 Where ...
  • SQL之去除重复列(distinct

    千次阅读 2011-03-25 10:19:00
    如:  存在重复记录的数据结果集:  select BankCode,BankName from dbo.Banks where Userid=1    剔除重复记录后的数据结果集:  select distinct BankCode,BankName from ...
  • 总的思路就是先找出表中重复数据中的一条数据,插入...1.重复数据完全一样,使用distinct select distinct * from table 2.id列不同,id类型为int,自增字段,使用聚合函数max或其他 select * from table where id in(...
  • SQL查询去除重复

    万次阅读 2019-05-21 18:17:03
    如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组(通过重复字段分组,只取重复行中的一个id达到不重复) select * from table where id in (select max(id) from table ...
  • 执得查询:select * from 表名 where 职业="无业" 得到的结果是 1 张三 湖南 无业 2 张三 河南 无业 3 李四 深圳 无业 想要的结果是:只显示姓名不重复的。是湖南的张三还是河南的张三都无所谓 1 张三 湖南 ...
  • 查询的结果有时会有重复值,需要去除重复值,在sql查询中使用distinct关键字很方便的达到效果。例如: SELECT distinct ckbm,qy,hwbm FROM base_kf_hwxx WHERE ckbm = '101' AND qy = 'A' AND isnull(hwxx_status,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,794
精华内容 37,517
关键字:

sql去重复查询distinct