精华内容
下载资源
问答
  • SQL语句distinct去重使用方法
    万次阅读
    2019-08-15 16:08:57

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

    表A:

    idname
    1a
    2b
    3c
    4b
    1a

    表B:

    provincecity
    河北省石家庄市
    河北省石家庄市

    1.对于单列的去重

    select distinct name from A

    执行之后的结果:

    name
    a
    b
    c

    2.对于多列的去重

    实例1:

    select distinct id,name from A

    执行之后的结果如下:

    idname
    1a
    2b
    3c
    4b

    实例2:

    select distinct province,city from B

    执行之后的结果:

    provincecity
    河北省石家庄市
    河北省石家庄市

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


    distinct规范

    distinct必须写在字段前面。

    select id,name distinct from A

    这样写就会报错。

    更多相关内容
  • distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不...其原因是distinct只能返回它的目标字段,而无法返回其它字段,接下来通过本篇文章给大家分享SQLdistinct用法,需要的朋友可以参考下
  • SQL_DISTINCT 语句详细用法

    万次阅读 多人点赞 2018-01-25 17:08:04
    二 基本使用(单独使用) 三 聚合函数中的DISTINCT 下面全部是在MySQL 的环境下进行测试的!!!!! 一 测试数据构建 数据表 跟 数据 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- ...

    一 测试数据构建

    二 基本使用(单独使用)

    三 聚合函数中的DISTINCT


    下面全部是在MySQL 的环境下进行测试的!!!!!

    一 测试数据构建

    数据表 跟 数据

    SET FOREIGN_KEY_CHECKS=0;
    
    
    -- ----------------------------
    -- Table structure for test_distinct
    -- ----------------------------
    DROP TABLE IF EXISTS `test_distinct`;
    CREATE TABLE `test_distinct` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `province` varchar(255) DEFAULT NULL,
      `city` varchar(255) DEFAULT NULL,
      `username` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=gbk;
    
    
    -- ----------------------------
    -- Records of test_distinct
    -- ----------------------------
    INSERT INTO `test_distinct` VALUES ('1', 'BJ', 'BJ', 'houchenggong');
    INSERT INTO `test_distinct` VALUES ('2', 'LN', 'DL', 'zhenhuasun');
    INSERT INTO `test_distinct` VALUES ('3', 'LN', 'DL', 'yueweihua');
    INSERT INTO `test_distinct` VALUES ('4', 'BJ', 'BJ', 'sunzhenhua');
    INSERT INTO `test_distinct` VALUES ('5', 'LN', 'TL', 'fengwenquan');
    INSERT INTO `test_distinct` VALUES ('6', 'LN', 'DL', 'renquan');
    INSERT INTO `test_distinct` VALUES ('7', 'LN', 'DL', 'wuxin');

    样例数据



    二 基本使用(单独使用)

    介绍

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

    具体的语法如下:

    select distinct expression[,expression...] from tables [where conditions];

    这里的expressions可以是多个字段。


    示例:

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



    2.1 只对一列操作

    对一列操作,表示选取该列不重复的数据项,这是用的比较多的一种用法

    测试数据


    SELECT DISTINCT city FROM test_distinct;



    2.2 对多列操作

    对多列操作,表示选取 多列都不重复的数据,相当于 多列拼接的记录 的整个一条记录 , 不重复的记录。

     测试数据:


    SELECT DISTINCT province, city FROM test_distinct;

    结果:



    注意:

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

    错误示例:


    2.DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,相当于 把 SELECT 表达式的项 拼接起来选唯一值。

    测试数据:


    SELECT DISTINCT   province,city FROM test_distinct;

    期望值:  只对 第一个参数  province 取唯一值。


    province   city

    BJ    BJ

    LN  DL


    Record  LN(province), TL(city) 被过滤掉,实际上

    实际值:

    DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,相当于 把 SELECT 表达式的项 拼接起来选唯一值。


    解决方法:使得DISTINCT 只对其中某一项生效

    方法一: 利用 group_concat 函数

    SELECT  group_concat(DISTINCT province) AS province, city FROM test_distinct GROUP BY province;


    方法二: 不利用DISTINCT , 而是利用group by (我认为第一种方法 其实就是 第二种方法, 第一种方法也就是第二种方法)

    SELECT province, city FROM test_distinct GROUP BY province;



    最后,比较下这两种方法的执行效率,分别EXPLAIN 一下。

    方法一

    EXPLAIN SELECT group_concat(DISTINCT province) AS province, city FROM test_distinct GROUP BY province;


    方法二

    EXPLAIN SELECT province, city FROM test_distinct GROUP BY province;



    2.3 针对NULL的处理

    distinct对NULL是不进行过滤的,即返回的结果中是包含NULL值的。

    测试数据:


    SELECT DISTINCT username FROM test_distinct;


    2.4 与ALL不能同时使用
    默认情况下,查询时返回所有的结果,此时使用的就是all语句,这是与distinct相对应的,如下:

    测试数据:


    SELECT ALL province, city FROM test_distinct;



    2.5 与distinctrow同义

    select distinctrow expression[,expression...] from tables [where conditions];




    三 聚合函数中的DISTINCT

    在聚合函数中DISTINCT 一般跟 COUNT 结合使用。

    效果与 SELECT  SUM (tmp.tmp_ct)  FROM ( SELECT COUNT(name)  AS tmp_ct GROUP BY name ) AS tmp  类似

    但不相同 !!, COUNT 会过滤NULL , 而 第二种方法不会!!!!


    示例:

    测试数据:


    SELECT COUNT(DISTINCT username) FROM test_distinct;


    注意 COUNT( ) 会过滤掉为NULL 的项


    再用 GROUP BY 试一下

    SELECT SUM(tmp.u_ct) FROM (SELECT COUNT(username) AS u_ct FROM test_distinct GROUP BY username) AS tmp;


    我们在子查询中调查一下:

    SELECT username, COUNT(username) AS u_ct FROM test_distinct GROUP BY username


    展开全文
  • SQLdistinct用法

    2021-11-04 21:49:40
    4.distinct必须放在开头 5.其他 在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: 表B: 1.作用于单列 select ...

    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(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去掉多余的重复记录。 select distinct name from table得到的结果是:  ———-  name a c 好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:
  • SQL中的distinct使用方法

    万次阅读 多人点赞 2019-10-13 18:47:25
    1. distinct含义与使用方法 distinct用来查询不重复记录的条数,即用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。 注意事项 distinct ...

    1. distinct含义与使用方法

    distinct用来查询不重复记录的条数,即用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。

    • 注意事项
    1. distinct 【查询字段】,必须放在要查询字段的开头,即放在第一个参数;
    2. 只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用;
    3. DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的
    4. 不能与all同时使用,默认情况下,查询时返回的就是所有的结果

    2. 使用示例

    • 示例1:只对一个字段查重:表示选取该字段一列不重复的数据

    • 示例2:多个字段去重:表示选取多个字段拼接的一条记录,不重复的所有记录

    • 示例3:改进示例2,输出的所有条数均按照distinc字段取单条(第一条)

    1. 解决办法一: 使用 group_concat 函数

    2. 解决办法二:使用group by函数

    • 示例4:聚合函数中使用distinct:一般跟 COUNT 结合使用, count()会过滤掉null项

    实际包含null项有4个记录,执行语句后过滤null项,计算为3。

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

    万次阅读 多人点赞 2019-03-26 11:21:32
    这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: 表B: 1.作用于单列 select distinct name from A 执行后结果如下: 2.作用于多列 ...
  • oracle11g可直接解锁scott用户来练习SQL语句*用sys用户解锁并给密码:特性:语法:SELECT[DISTINCT]*|字段[别名],[字段[别名]]FROM表名称[表别名]查询dept表的全部记录查询每个雇员的编号,姓名和基本工资查询每个
  • 完美解决SQL语句distinct的多列问题

    千次阅读 2018-10-12 12:41:19
    distinct 多列问题结合group by的解决方法   表 table1  id RegName PostionSN PersonSN  1 山东齐鲁制药 223 2  2 山东齐鲁制药 224 2  3 北京城建公司 225 2  4 科技公司 225 2 我想获得结果是  id ...
  • distinct 多列问题结合group by的解决方法 表 table1  id RegName PostionSN PersonSN  1 山东齐鲁制药 223 2  2 山东齐鲁制药 224 2  3 北京城建公司 225 2  4 科技公司 225 2 我想获得结果是  id RegName ...
  • C/C++小白第23篇博客,记录学习经历 ...看懂一个程序: 流程,每个语句的功能,找数一试 查询最重要的是顺序 命令配置很多参数,参数配置到一起,就应该注意执行的顺序 select distinct deptno from emp; -- distinct
  • sql语句distinct用法

    2019-05-18 22:40:39
    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同...(比如订单或者是想要查看所有订单中的用户id,此时一个用户可能有多个纪录,所以用与去重,不然通过其他方法再去重很麻烦) ...
  • 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在检索的时候,...
  • SQL语句查询中的DISTINCT与GROUP BY用法

    千次阅读 2020-08-19 19:30:39
    执行sqlDISTINCT进行合并的时候,如果查询项都能合并,合并为一: SELECT DISTINCT(dcs.CON_UNITCONCODE), DCS.CON_CONCODE from DM_CONTRACT_STATUS dcs WHERE DCS.CON_CONCODE = 'SY-GJ-2019-005'; 执行sql:...
  • 使用SQL server 数据库也有好多年,现在还在用!不得不说这是中、中上型系统用得比较多得数据库;现在为了记录,以后会在这里更新,也希望对大家有帮助; 1、查找数据去重 distinct,以下table为数据表名 (1)查询...
  • SQL去重distinct方法解析

    千次阅读 2021-07-14 16:56:19
    distinct 含义:distinct用来查询不重复记录的...2.只能在SELECT 语句使用,不能在 INSERT, DELETE, UPDATE 中使用; 3.DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的
  • SQLdistinct用法详解

    2019-05-08 10:05:00
    这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: 表B: 1.作用于单列 select distinct name from A 执行后结果如下: 2.作...
  • 文章目录1 SQLdistinct用法1.1 作用于单列1.2 作用于多列1.3 COUNT统计 1 SQLdistinct用法 先准备一张具有重复分数的单表 scores id name score 1 张三 88 2 李四 91 3 王二 88 4 赵五 94 5...
  • sum函数中使用if判断条件:{ sum( IF (order_type = 0, real_price, 0) ) AS '当天支付收入', sum( IF (order_type = 1, real_price, 0) ) AS '当天打赏收入', } count(DISTINCT open_id) AS '付费总人数', count
  • 在表中,可能会包含重复...表A:示例1select distinct name from A执行后结果如下:示例2select distinct name, id from A执行后结果如下:实际上是根据“name+id”来去重,distinct同时作用在了name和id上,这种方...
  • distinct 可以去除查询结果中的重复值,在select语句distinct 只能出现所有字段的前面 案例1: select distinct job from emp; select distinct ename ,job from emp 案例2:统计工作岗位的数量? mysql&...
  • 动态构造一个SQL语句然后执行,构造动态语句的查询语句如下 SELECT REPLACE(WMSYS.WM_CONCAT(STR),',',' UNION ') FROM (SELECT 'SELECT class_no,stu_name,sex,age FROM ' || TABLE_NAME STR FROM USER_TABLES)   ...
  • distinct与order by同时使用的时候,排序的字段必须出现在查询列中,可是为什么我没这么做还是查询成功了呢. ![图片说明](https://img-ask.csdn.net/upload/201709/05/1504581202_755865.png) 然而同样的表结构放到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,552
精华内容 36,620
关键字:

sql语句distinct用法