-
2019-08-15 16:08:57
很多时候数据库查出来的数据会出现重复的情况。
不过这些情况用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中distinct的用法(四种示例分析)
2020-09-10 07:06:18distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不...其原因是distinct只能返回它的目标字段,而无法返回其它字段,接下来通过本篇文章给大家分享SQL中distinct的用法,需要的朋友可以参考下 -
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
-
SQL中distinct的用法
2021-11-04 21:49:404.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将一列的多行内容拼接成一行的问题讨论
-
sqlserver中distinct的用法(不重复的记录)
2020-12-15 18:09:18下面先来看看例子: ...使用distinct去掉多余的重复记录。 select distinct name from table得到的结果是: ———- name a c 好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧: -
SQL中的distinct的使用方法
2019-10-13 18:47:251. distinct含义与使用方法 distinct用来查询不重复记录的条数,即用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。 注意事项 distinct ...1. distinct含义与使用方法
distinct用来查询不重复记录的条数,即用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。
- 注意事项
- distinct 【查询字段】,必须放在要查询字段的开头,即放在第一个参数;
- 只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用;
- DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的
- 不能与all同时使用,默认情况下,查询时返回的就是所有的结果
2. 使用示例
- 示例1:只对一个字段查重:表示选取该字段一列不重复的数据
- 示例2:多个字段去重:表示选取多个字段拼接的一条记录,不重复的所有记录
- 示例3:改进示例2,输出的所有条数均按照distinc字段取单条(第一条)
1. 解决办法一: 使用 group_concat 函数
2. 解决办法二:使用group by函数
- 示例4:聚合函数中使用distinct:一般跟 COUNT 结合使用, count()会过滤掉null项
实际包含null项有4个记录,执行语句后过滤null项,计算为3。
-
sql去重复操作详解SQL中distinct的用法
2019-03-26 11:21:32这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: 表B: 1.作用于单列 select distinct name from A 执行后结果如下: 2.作用于多列 ... -
SQL语句基础用法大全(DML)
2021-02-24 17:37:38oracle11g可直接解锁scott用户来练习SQL语句*用sys用户解锁并给密码:特性:语法:SELECT[DISTINCT]*|字段[别名],[字段[别名]]FROM表名称[表别名]查询dept表的全部记录查询每个雇员的编号,姓名和基本工资查询每个 -
完美解决SQL语句distinct的多列问题
2018-10-12 12:41:19distinct 多列问题结合group by的解决方法 表 table1 id RegName PostionSN PersonSN 1 山东齐鲁制药 223 2 2 山东齐鲁制药 224 2 3 北京城建公司 225 2 4 科技公司 225 2 我想获得结果是 id ... -
SQL语句distinct的多列问题
2018-10-29 23:33:41distinct 多列问题结合group by的解决方法 表 table1 id RegName PostionSN PersonSN 1 山东齐鲁制药 223 2 2 山东齐鲁制药 224 2 3 北京城建公司 225 2 4 科技公司 225 2 我想获得结果是 id RegName ... -
SqlServer distinct用法 和 回顾
2022-03-21 15:36:40C/C++小白第23篇博客,记录学习经历 ...看懂一个程序: 流程,每个语句的功能,找数一试 查询最重要的是顺序 命令配置很多参数,参数配置到一起,就应该注意执行的顺序 select distinct deptno from emp; -- distinct -
sql语句distinct的用法
2019-05-18 22:40:39在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同...(比如订单或者是想要查看所有订单中的用户id,此时一个用户可能有多个纪录,所以用与去重,不然通过其他方法再去重很麻烦) ... -
SQL中distinct 和 row_number() over() 的区别及用法
2020-12-16 10:59:05在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在检索的时候,... -
SQL语句查询中的DISTINCT与GROUP BY用法
2020-08-19 19:30:39执行sql:DISTINCT进行合并的时候,如果查询项都能合并,合并为一: SELECT DISTINCT(dcs.CON_UNITCONCODE), DCS.CON_CONCODE from DM_CONTRACT_STATUS dcs WHERE DCS.CON_CONCODE = 'SY-GJ-2019-005'; 执行sql:... -
SQL server 常用语句,去重distinct用法
2020-03-30 11:47:34使用SQL server 数据库也有好多年,现在还在用!不得不说这是中、中上型系统用得比较多得数据库;现在为了记录,以后会在这里更新,也希望对大家有帮助; 1、查找数据去重 distinct,以下table为数据表名 (1)查询... -
SQL去重distinct方法解析
2021-07-14 16:56:19一 distinct 含义:distinct用来查询不重复记录的...2.只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用; 3.DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的 -
SQL 中distinct用法详解
2019-05-08 10:05:00这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: 表B: 1.作用于单列 select distinct name from A 执行后结果如下: 2.作... -
SQL -- distinct 函数的用法
2020-09-12 00:29:28文章目录1 SQL中distinct的用法1.1 作用于单列1.2 作用于多列1.3 COUNT统计 1 SQL中distinct的用法 先准备一张具有重复分数的单表 scores id name score 1 张三 88 2 李四 91 3 王二 88 4 赵五 94 5... -
使用SQL语句统计数据时sum和count函数中使用if判断条件的讲解
2021-01-19 23:02:57sum函数中使用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 -
SQL select distinct的使用方法
2021-05-03 04:57:44在表中,可能会包含重复...表A:示例1select distinct name from A执行后结果如下:示例2select distinct name, id from A执行后结果如下:实际上是根据“name+id”来去重,distinct同时作用在了name和id上,这种方... -
去除重复记录——distinct在sql语句中的用法
2021-04-29 00:44:50distinct 可以去除查询结果中的重复值,在select语句中 distinct 只能出现所有字段的前面 案例1: select distinct job from emp; select distinct ename ,job from emp 案例2:统计工作岗位的数量? mysql&... -
SQL中distinct的用法 和 SQL Union作用
2018-09-11 17:36:35动态构造一个SQL语句然后执行,构造动态语句的查询语句如下 SELECT REPLACE(WMSYS.WM_CONCAT(STR),',',' UNION ') FROM (SELECT 'SELECT class_no,stu_name,sex,age FROM ' || TABLE_NAME STR FROM USER_TABLES) ... -
Sql语句distinct与order by同时使用的问题
2017-09-05 03:15:36distinct与order by同时使用的时候,排序的字段必须出现在查询列中,可是为什么我没这么做还是查询成功了呢.  然而同样的表结构放到...