精华内容
下载资源
问答
  • sql去重复查询distinct
    千次阅读
    2021-08-30 10:24:56

    很多时候我们查询出来的某个字段是会存在重复值的

    那么可以用到这个关键词:DISTINCT去掉重复值

    方法如下:

    表名:table
    字段:name

    select DISTINCT name FROM table

    语法结构如下:

    select DISTINCT 字段名 from 表名

    更多相关内容
  • sql 去重查询 distinct

    2022-06-02 10:20:53
    distinct一般是用来去除查询结果中的重复记录的,而且这个语句在select、insert、delete和update中只可以在select中使用,

    sql 去重查询

    select Distinct UserId,Name from UserInfo where UserType=1

    介绍

    distinct一般是用来去除查询结果中的重复记录的,而且这个语句在select、insert、delete和update中只可以在select中使用,

    具体的语法如下:

    select distinct expression[,expression...] from tables [where conditions];
    这里的expressions可以是多个字段。
     

     注意

    1.只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用

    2.对多列操作,表示选取 多列都不重复的数据,相当于 多列拼接的记录 的整个一条记录 , 不重复的记录。(如顶部代码就是多列操作)

    3.DISTINCT 必须放在第一个参数。


    这篇文章将的比较详细

    SQL_DISTINCT 语句详细用法_高达一号的博客-CSDN博客_sql中distinct一 测试数据构建二 基本使用(单独使用)三 聚合函数中的DISTINCT下面全部是在MySQL 的环境下进行测试的!!!!!一 测试数据构建数据表 跟 数据SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for test_distinct-- ----https://blog.csdn.net/u010003835/article/details/79154457

    展开全文
  • sql去重复操作详解SQLdistinct的用法

    千次阅读 2021-05-07 09:40:40
    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(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 语句,

     
    1. /**

    2. * 其中 PPPRDER 为 Schema 的名字,即表 CESHIDEMO 在 PPPRDER 中

    3. */

    4.  
    5. 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 语句,

     
    1. /*

    2. * 其中 rn 表示最后添加的那一列

    3. */

    4.  
    5. select * from

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

    7. where rn = 1

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

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

    rn

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

    展开全文
  • 在 MySQL 查询中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦。用法也很简单: SELECT DISTINCT * FROM tableName ...
  • id可以理解为uuid,person_sort_code可以理解为唯一的标识,但是唯一标识重复了! 问题来了,这时候我们要删除的重复的数据! -- 解决思路 -- (1)根据person_sort_code进行分组; -- (2)取出分组后的最大id...

    目录

    一、查找去除重复数据

    二、删除重复数据

    三、DISTINCT用法


    一、查找去除重复数据

    数据如图:

     id可以理解为uuid,person_sort_code可以理解为唯一的标识,但是唯一标识重复了!

    问题来了,这时候我们要去除重复的数据!

    -- 解决思路
    -- (1)根据person_sort_code进行分组;
    -- (2)取出分组后的最大id(或最小id);
    -- (3)去除最大(或最小)id以外的其他字段;

    select * from a_person_test where id in 
         ( select max(id) from a_person_test group by person_sort_code )

    最终结果如下图:

    二、删除重复数据

    这里就不多说了

    delete from a_person_test where id not in (
    		select t.max_id from 
    		(select max(id) as max_id from a_person_test group by person_sort_code) as t
    		);
    
    SELECT * FROM a_person_test

    效果图同上

    三、DISTINCT用法

    它是几条一模一样的数据,才会去重

    SELECT DISTINCT* FROM a_person_test ORDER BY id

     效果如下:

    展开全文
  • 比如我想用一条语句查询得到name不重复的所有数据,那就必须 使用distinct去掉多余的重复记录。 select distinct name from table得到的结果是:  ———-  name a c 好像达到效果了,可是,我想要得到的是id值呢...
  • SQL查询时使用DISTINCT去掉重复

    千次阅读 2020-10-04 16:53:15
    查询要求 在数据库中查询存在课程分数在90分以下的同学的学号 数据库表 SQL代码 SELECT DISTINCT StudentNumber FROM SC ...使用SELECT DISTINCT来去掉重复的记录,如果没有DISTINCT查询结果为 ...
  • 单表的唯一查询用:distinct多表的唯一查询用:group bydistinct 查询多表时,left join 还有效,全连接无效,在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余...
  • distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 。 select distinct name from t1 能消除重复记录,但只能取一个字段,...
  • SQL去重distinct方法解析

    万次阅读 2021-07-14 16:56:19
    含义:distinct用来查询重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段 用法注意: 1.distinct查询字段】,必须放在要...
  • sql 去除重复distinct详解

    千次阅读 2018-12-13 16:18:44
     在sql数据查询中,有时候,数据可能会出现很多重复相同的数据,但是,我们有时候只是想要查询出不同的数据,把多余重复的数据过滤掉,可以通过使用distinct来实现过滤重复数据,返回唯一的数据。 1.案例详解: ...
  • 这将把所有的资料都抓出,无论资料值有无重复。在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况。换句话说,我们需要知道这个表格/栏位内有哪些不同的值,而每个值出现的次数并不重要。这要如何达成...
  • Distinct查询结果中,去掉了重复的行 1.语法:      SELECT Distinct列名称 FROM 表名称; &...
  • sql 查询去掉重复记录— distinct用法

    万次阅读 2018-08-23 00:06:44
    数据库查询时,列出不重复记录,使用distinct, 例如:select distinct 字段名 from 表名 。对于查询多个字段同时不重复记录同样的道理,例如:select distinct 字段名1,字段名2,字段名3 from 表名...
  • 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
  • 今天做了一个题,学到了一个知识点: 有一个高速收费表VF,如下: 统计收费涉及的车辆有...其中DISTINCT翻译为明显的、清楚的,在这里用作消除重复行,在此为消除VF表中VchReg字段的重复行,得到的即为涉及的车辆。
  • 如果想统计数据库中某个或...这里的COUNT表示统计查询结果的总行数,而DISTINCT表示统计唯一值,就是说去掉查询结果里的重复值,这个查询语句返回的是一个数字。这个语句后面还可以结合WHERE 进行条件过滤,比如说:...
  • sql---distinct显示多个字段,去重复

    万次阅读 2017-05-13 16:59:40
    众所周知,distinct可以列出不重复的记录,对于单个字段来说distinct使用比较简单,但是对于多个字段来说,distinct使用起来会使人发狂。而且貌似也没有见到微软对distinct使用多字段的任何说明。下面就提供了一种...
  • SQL去重参考 https://blog.csdn.net/haibo0668/article/details/83827340
  • SQL查询结果去重

    千次阅读 2021-10-20 10:33:06
    SQL查询结果去重 使用distinct关键字,去除重复的记录行 SELECT loc FROM dept; SELECT DISTINCT loc FROM dept; 案例: 描述 题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。 ...
  • 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
  • SQL语句去掉重复记录,获取重复记录 –查询一个表中有效去掉重复的记录,UserID为自增长主键,RoleID为重复字段 SELECT MIN(UserID) AS UserID, RoleID FROM tmpTable GROUP BY RoleID SELECT RoleID ...
  • sqlserver 去重查询distinct

    千次阅读 2020-12-24 13:39:18
    比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。select distinct name from table得到的结果是:nameac好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:s...
  • SQL DISTINCT去掉重复的数据统计方法

    千次阅读 2016-09-01 22:54:17
    SQL DISTINCT重复的数据统计方法 group by 重复数据的个数统计 删除重复的数据2008-09-10 16:30DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行。如果没有指定 DISTINCT,那么将返回所有行,包括重复的行。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,448
精华内容 45,379
关键字:

sql去重复查询distinct