-
2021-01-19 02:59:32
导读
DISTINCT 实际上和 GROUP BY 操作的实现非常相似,只不过是在 GROUP BY 之后的每组中只取出一条记录而已。所以,DISTINCT 的实现和 GROUP BY 的实现也基本差不多,没有太大的区别。同样可以通过松散索引扫描或者是紧凑索引扫描来实现,当然,在无法仅仅使用索引即能完成 DISTINCT 的时候,MySQL 只能通过临时表来完成。但是,和 GROUP BY 有一点差别的是,DISTINCT 并不需要进行排序。
在使用 MySQL SELECT 语句查询数据的时候返回的是所有匹配的行。
查询 tb_students_info 表中所有 age 的执行结果如下所示。
mysql> SELECT age FROM tb_students_info;
+------+
| age |
+------+
| 25 |
| 23 |
| 23 |
| 22 |
| 24 |
| 21 |
| 22 |
| 23 |
| 22 |
| 23 |
+------+
10 rows in set (0.00 sec)
可以看到查询结果返回了 10 条记录,其中有一些重复的 age 值,有时出于对数据分析的要求,需要消除重复的记录值。这时候就需要用到 DISTINCT 关键字指示 MySQL 消除重复的记录值,语法格式为:
SELECT DISTINCT FROM ;
查询 tb_students_info 表中 age 字段的值,返回 age 字段的值且不得重复,输入的 SQL 语句和执行结果如下所示。
mysql> SELECT DISTINCT age FROM tb_students_info;
+------+
| age |
+------+
| 25 |
| 23 |
| 22 |
| 24 |
| 21 |
+------+
5 rows in set (0.11 sec)
由运行结果可以看到,这次查询结果只返回了 5 条记录的 age 值,且没有重复的值。
更多相关内容 -
MySQL去重distinct
2021-02-04 16:30:47去重在MySQL中需要查询表中不重复的记录时,可以使用distinct关键字过滤重复记录。语法:select distinct [,...,] from ;数据表如下:mysql> select * from emp;+-------+--------+------------+------+---------...去重
在MySQL中需要查询表中不重复的记录时,可以使用distinct关键字过滤重复记录。
语法:
select distinct [,...,] from ;
数据表如下:
mysql> select * from emp;
+-------+--------+------------+------+------------+------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+------------+------+------------+------+------+--------+
| 7369 | smith | clerk | 7902 | 1980-12-17 | 800 | NULL | 20 |
| 7499 | allen | salesman | 7698 | 1981-02-20 | 1600 | 300 | 30 |
| 7521 | ward | salesman | 7698 | 1981-02-22 | 1250 | 500 | 30 |
| 7566 | jones | manager | 7839 | 1981-04-02 | 2975 | NULL | 20 |
| 7654 | martin | salesman | 7698 | 1981-09-28 | 1250 | 1400 | 30 |
| 7698 | blake | manager | 7839 | 1981-05-01 | 2850 | NULL | 30 |
| 7782 | clark | manager | 7839 | 1981-06-09 | 2450 | NULL | 10 |
| 7788 | scott | analyst | 7566 | 1987-04-19 | 3000 | NULL | 20 |
| 7839 | king | persident | NULL | 1981-11-17 | 5000 | NULL | 10 |
| 7844 | turner | salesman | 7698 | 1981-09-08 | 1500 | 0 | 30 |
| 7876 | adams | clerk | 7788 | 1987-05-23 | 1100 | NULL | 20 |
| 7900 | james | clerk | 7698 | 1981-12-03 | 950 | NULL | 30 |
| 7902 | ford | analyst | 7566 | 1981-12-03 | 3000 | NULL | 20 |
| 7934 | miller | clerk | 7782 | 1982-01-23 | 1300 | NULL | 10 |
+-------+--------+------------+------+------------+------+------+--------+
示例1:单个字段去重
mysql> select distinct deptno from emp;
+--------+
| deptno |
+--------+
| 20 |
| 30 |
| 10 |
+--------+
mysql> select distinct job from emp;
+------------+
| job |
+------------+
| clerk |
| salesman |
| manager |
| analyst |
| persident |
+------------+
示例2:多个字段去重
mysql> select distinct deptno,job from emp;
+--------+------------+
| deptno | job |
+--------+------------+
| 20 | clerk |
| 30 | salesman |
| 20 | manager |
| 30 | manager |
| 10 | manager |
| 20 | analyst |
| 10 | persident |
| 30 | clerk |
| 10 | clerk |
+--------+------------+
多个字段去重时,distinct关键字必须位于第一个字段前,多个字段完全一样的情况下,才会过滤。
非重复计数:
select count(distinct [,...,]) from ;
示例:
mysql> select count(distinct deptno,job) from emp;
+----------------------------+
| count(distinct deptno,job) |
+----------------------------+
| 9 |
+----------------------------+
-
mysql之简单查询(小白入门必备)
2021-02-08 00:27:54select查询语法格式1、去重查询2、过滤数据3、常数的查询4、分组查询5、限制查询第一种:LIMIT 记录数 [OFFSET 偏移量] ;第二种:LIMIT [偏移量,]记录数;算术运算符1、通配符过滤2、排序语法格式//剔除查询结果中...select查询
语法格式
1、去重查询
2、过滤数据
3、常数的查询
4、分组查询
5、限制查询
第一种:LIMIT 记录数 [OFFSET 偏移量] ;
第二种:LIMIT [偏移量,]记录数;
算术运算符
1、通配符过滤
2、排序
语法格式
//剔除查询结果中重复的数据
SELECT [DISTINCT] * | {字段名1,字段名2,字段名3,……} FROM 表名
“|” 意为或者,二选一
//指定查询的条件
[WHERE 条件表达式1]
//对字段进行分组
[GROUP BY 字段名] or [HAVING 条件表达式2]
//升降序排列
默认为升序ASC [ORDER BY 字段名][ASC升|DESC降]
//记录数
[LIMIT [OFFSET记录数] or [LIMIT[记录数,偏移量]]
1、去重查询
SELECT [DISTINCT] * | {字段名1,字段名2,……}
字段名1,字段名2,……FROM表名
select distinct id ,name from products;
DISTINCT,可选参数,用于剔除查询结果中重复的数据
在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。
星号*通配符,表示表中的所有字段 “|” 为或者,互斥关系,二选一
2、过滤数据
WHERE条件表达式,可选参数,用于指定查询的条件
select name,price from products where price = 2;
3、常数的查询
在SELECT中除了书写列名,还可以书写常数
SELECT ‘2020-05-20’,9999,sname FROM student;
4、分组查询
GROUP BY字段名 [HAVING 条件表达式2]
select*from student where group by name;
SELECT ename, sal * 12 AS yearSalary FROM emp ORDER BY yearSalary;
GROUP BY,可选参数,用于将查询结果按照指定字段进行分组
HAVING,可选参数,用于对分组后的结果进行过滤
5、限制查询
第一种:LIMIT 记录数 [OFFSET 偏移量] ;
select name from products limit 5;
注:limit 5 表示 查询结果不超过5行
第二种:LIMIT [偏移量,]记录数;
select ame from products limit 5,5;
注:从第五行开始,查询5行
LIMIT,可选参数,用于限制查询结果的数量
LIMIT后面可以跟两个参数,第一个参数OFFSET表示偏移量,如果偏移量为0,则从查询结果的第一条记录开始,偏移量为1,则从查询结果的第二条记录开始,以此类推
OFFSET,可选参数,如果不指定其默认值为0
第二个参数,记录数表示返回查询记录的条数
算术运算符
在SELECT查询语句中还可以使用加减乘除运算符
– 查询20年后各学生的年龄大小
SELECT sname,age+20 FROM student;
1、通配符过滤
最常使用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数
select id, name from products where name like ‘j%’;
2、排序
ORDER BY 字段名 [ASC | DESC]
select * from stu where order by money ASC;
ORDER BY,可选参数,用于将查询结果按照指定字段进行排序
排序方式由参数ASC或DESC控制,其中,ASC表示按升序进行排列,DESC表示按降序进行排列,如果不指定参数,默认为升序排列
-
MYSQL去重方法汇总
2022-04-21 21:03:18表数据 备注: id: 任务id; name: 参与人name; ...-- 根据任务ID去重 ...它不适合用来展示去重后具体的值,一般与 count 配合用来...distinct 使用中,放在 select 后边,对后面所有的字段的值统一进行去重。比如distinc表数据
备注:
- id: 任务id;
- name: 参与人name;
1:distinct
1.1
-- 根据任务ID去重 SELECT DISTINCT id FROM test;
1.2
-- 任务总数 SELECT COUNT(DISTINCT id) FROM test;
1.3
distinct 通常效率较低。它不适合用来展示去重后具体的值,一般与 count 配合用来计算条数
。
distinct 使用中,放在 select 后边,对后面所有的字段的值统一进行去重。比如distinct后面有两个字段,那么 11,11 和 11, 21 这两条记录不是重复值
SELECT DISTINCT id, name FROM test;
2: group by
2.1
SELECT id, name, count(*) FROM test GROUP BY id;
-- 任务总数 SELECT count( tmp.id ) FROM ( SELECT id, NAME FROM test GROUP BY id ) tmp
3:row_number
row_number 是窗口函数,语法如下:
row_number() over (partition by <用于分组的字段名> order by <用于组内排序的字段名>) 其中partition by 部分可省略
SELECT id, name, ROW_NUMBER() over (ORDER BY id) rn FROM test
SELECT id, name, ROW_NUMBER() over (PARTITION by id ORDER BY id) rn FROM test
SELECT COUNT( CASE WHEN rn = 1 THEN id ELSE NULL END ) count FROM ( SELECT id, NAME, ROW_NUMBER() over ( PARTITION BY id ORDER BY id ) rn FROM test ) tmp
-
MySQL去重数据 - Linux就该这么学的个人空间 - OSCHINA - 中文开源技术交流社区
2021-01-19 02:59:31DISTINCT 实际上和 GROUP BY 操作的实现...同样可以通过松散索引扫描或者是紧凑索引扫描来实现,当然,在无法仅仅使用索引即能完成 DISTINCT 的时候,MySQL 只能通过临时表来完成。但是,和 GROUP BY 有一点差别的... -
mysql去重多个字段
2021-01-20 14:56:25mysql去重多个字段源表:select distinct id , name, phone from chongfubiao_quchong;select distinct * from chongfubiao_quchong;不合适的命令:distinct(*)命令 #语法错误[Err] 1064 - You have an error in ... -
Mysql去重查询---DISTINCT、group by
2022-01-12 22:51:25提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 DISTINCT 语法: 关键词 distinct用于返回唯一不同的值。 表结构 案例 SELECT DISTINCT age FROM emp1 SELECT DISTINCT age ,NAME FROM ... -
做了6年的Java,mysql去重查询方法
2021-06-18 19:16:21MySQL是Java程序员面向高级的必备技能,很多朋友在面试时经常在这里折戟沉沙,饮恨不已。熟练掌握MySQL知识,在实践中具有很强的操作性,尤其是在互联网行业,不仅要写好代码、实现功能,而且还要在高并发的情况下... -
MySQL去重语句
2019-01-09 21:24:52按照某个键值将最小ID创建新表储存: create table tmp_table as select min(id) from wp_posts group by post_title; 然后将储存在tmp中的id与原表对照,将原表中不存在与tmp中的id删除: delete from wp_posts ... -
MySQL去重问题:DISTINCT语句
2021-01-13 13:03:521、DISTINCT介绍:在表中,一个列可能会包含多个重复值,有时...DISTINCT 语法如下所示:SELECT DISTINCT column_name FROM table_name;2、DISTINCT使用注意事项:distinct 语句中 select 显示的字段只能是 distin... -
MySQL去重:DISTINCT语句
2020-08-21 22:32:28DISTINCT 语法如下所示: SELECT DISTINCT column_name FROM table_name; 2、DISTINCT使用注意事项: distinct 语句中 select 显示的字段只能是 distinct 指定的字段,其他字段是不可能出现的。如下所示: ... -
MySQL8.0 去重
2022-03-17 17:59:24最近有个需求就是去重获取MySQL中企业的报表数据,同一个企业的报表可以有多个,获取最新的报表数据,这里数据库的版本是8.0。 这里模拟下需求,创建数据库表 test : create table test ( id int auto_increment ... -
mySQL去重和计数
2018-02-01 16:50:00Distinct的作用是用于从指定集合中消除重复的元组,经常和count搭档工作,语法如下 COUNT( { [ ALL | DISTINCT ] expression ] | * } ) 这时,可能会碰到如下情况,你想统计同时有多列字段重复的数目,你可能会... -
MySQL 对数据去重
2021-01-28 22:38:06在使用 MySQL 存储数据的时候,经常会遇到 table 中存在重复数据的情况,这个时候,我们就对 table 进行去重,我这里对常用的 MySQL 去重方法做一个简单的总结。distinctselect distinct key from tableselect ... -
高薪程序员&面试题精讲系列83之MySQL如何查重和去重?如何分页?
2022-04-01 09:18:55今天的这篇文章,壹哥会给大家讲解数据库查重、去重相关的面试题,这属于使用技巧类的题目,大家记住实现方式即可。 要想在MySQL中去除重复数据,我们可以先把表中存在的重复数据给查出来,所以接下来壹哥先给大家... -
Mysql如何去重
2019-08-20 17:46:53MySQL对数据去重的方法 在使用 MySQL 存储数据的时候,经常会遇到 table 中存在重复数据的情况,这个时候,我们就对 table 进行去重,我这里对常用的 MySQL 去重方法做一个简单的总结。 distinct select ... -
Mysql去重使用distinct还是group by分析需求
2021-03-29 17:40:53Mysql去重数据管理数据准备数据新的改变准备存储过程插入10万数据使用mysql自带的分析函数给num字段添加索引 准备数据 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器... -
MySql查询去重
2021-04-20 13:14:42MySql查询去重题外话,对你们来说很简单,可是对我来说很重要,所以100分,谢谢!测试通过就结贴给分问题是这样的:表t_useruser_mobile //用户手机号service_id //服务编号 1-高级用户,2普通用户//由于历史原因,会员可以... -
MYSQL用group by去重后,再用count计算条数
2021-01-21 14:57:36补充:postgresql流复制主从切换+resetxlog主 192.168.3.46从 192.16 2021-01-16 12:21:25 create user的语法CREATE USER name [ [ WITH ] option [ ... ] ] where option can be: SUPERUSER | NOSUPERUSER | ... -
mysql去重函数:DISTINCT ,与GROUP_CONCAT结合去重
2019-07-02 17:49:44mysql去重函数:DISTINCT ,与GROUP_CONCAT结合创建表语法distinct多字段去重 创建表 DROP TABLE IF EXISTS `qipa_shop`; CREATE TABLE `qipa_shop` ( `price` varchar(255) CHARACTER SET utf8mb4 COLLATE utf... -
数据库——MySQL(二)(增删查改、去重,分页、模糊查询、排序)
2021-01-27 20:41:29新增所有列的记录:● 语法:insert into 表名称 values (值1,值2,值3,...值n);● 例子:insert into user values(‘张三’,‘演员’,22,‘男’);注意:必须把所有列都进行新增,并且新增值的顺序需要与建表时列的... -
MySQL 去重的 3 种方法,还有谁不会?!
2022-05-17 00:16:11来自:blog.csdn.net/xienan_ds_zj/article/details/103869048在使用SQL提数的时候,常会遇到表内有重复值的时候,比如我们想得到 uv (独立访客),就需要做去重。在 MySQL 中通常是使用 distinct 或 group by子句... -
MySQL 对数据去重的方法
2020-01-01 01:00:59在使用 MySQL 存储数据的时候,经常会遇到 table 中存在重复数据的情况,这个时候,我们就对 table 进行去重,我这里对常用的 MySQL 去重方法做一个简单的总结。 1、distinct select distinct key from table; ... -
mysql中对数据的去重
2019-08-17 15:31:40最近面试有家公司问了个mysql的数据去重,自己对于mysql一般多用于增删改查,所以私下来尝试了mysql数据的去重总结 DISTINCT 在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct...