mysql | 去重查询

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 今天在实际开发过程中遇到一个数据库去重查询的问题,在这里给大家分享一下。类似于上面这张数据表,我们发现id=5和id=6的数据passWord和userName数据是一样的。

今天在实际开发过程中遇到一个数据库去重查询的问题,在这里给大家分享一下。

类似于上面这张数据表,我们发现id=5和id=6的数据passWord和userName数据是一样的。我们的需求是去掉重复的数据(passWord,userName)获得结果集,去重的条件就是根据passWord和userName两个字段。

利用 distinct

我们知道,mysql提供了数据去重的方法,利用distinct关键字对需要处理的字段进行去重。我们来看一下效果。



咦?不对啊,为什么只返回了需要去重处理的字段,而我们想要的结果是对所有字段的返回啊。为什么啊?所以我们来简单了解下distinct的用法。在实际应用中,distinct是用来返回非重复记录的条数,而不能返回非重复数据的结果集。这是因为使用distinct之后只能返回去重的字段,而不能返回其他的字段。这显然不是我们所需要的。既然distinct满足不了我们的需求,我们来换一种查询方式。

利用 group by

我们知道除了使用distinct关键字外还可以使用group by关键字对去重数据进行去重查询,来试一下。


看效果确实是符合了我们的需求,但是我们的需求又变了,需要添加一个查询条件,比如说根据id进行去重查询,我们再来看下。

提示很友好,告诉我们这条sql是错误的,这是因为where是对数据集进行筛选的,而group by 是对结果集进行聚集,在执行书序上来说group by 是在where筛选后才执行的,再来简单看下sql的执行顺序。

sql执行顺序

SELECT DISTINCT <select_list>
FROM <left_table>
<join_type> JOIN <right_table>
ON <join_condition>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
ORDER BY <order_by_condition>
LIMIT <limit_number>

看到这里我们就知道为什么sql会报错了,所以,要想符合我们的要求可以使用having关键字,因为having执行顺序位于group by之后,而且having是搭配group by一起来使用的,再来看下。

使用having

select *  from user GROUP BY `passWord`,userName HAVING id = "1"

利用having关键字对结果集进行过滤后终于达到了符合我们要求的结果。这样就实现了对数据的去重查询。

where 和 having区别

1、having用于groyup by之后。
2、where是用于表中筛选查询,having用于在where和group 结果中查询。
3、havin可以使用聚合函数,而where 不能。
4、having执行顺序位于where之后。


(完)

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
SQL 关系型数据库 MySQL
【MySQL】基本查询(表的增删改查)-- 详解(上)
【MySQL】基本查询(表的增删改查)-- 详解(上)
|
3天前
|
关系型数据库 MySQL
【MySQL】复合查询(重点)-- 详解
【MySQL】复合查询(重点)-- 详解
|
9天前
|
SQL 关系型数据库 MySQL
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
|
3天前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
|
3天前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
|
3天前
|
关系型数据库 MySQL 数据库管理
【MySQL进阶之路 | 基础篇】子查询之二(不相关子查询与相关子查询)
【MySQL进阶之路 | 基础篇】子查询之二(不相关子查询与相关子查询)
|
3天前
|
SQL Oracle 关系型数据库
【MySQL】基本查询(表的增删改查)-- 详解(下)
【MySQL】基本查询(表的增删改查)-- 详解(下)
|
7天前
|
关系型数据库 MySQL Linux
查询服务器中有没有mysql - 蓝易云
同样,如果MySQL已经安装,这个命令将会显示MySQL的版本信息。如果没有安装,系统将会显示一个错误消息。
60 0
|
7天前
|
SQL 关系型数据库 MySQL
查询mysql版本sql - 蓝易云
执行这个命令后,MySQL将返回当前正在运行的版本信息。
42 0
|
9天前
|
缓存 关系型数据库 MySQL
如何优化MySQL数据库查询性能
MySQL是一款常用的关系型数据库,但在实际使用过程中,由于数据量增加和查询操作复杂度增加,会导致查询性能下降。本文将介绍一些优化MySQL数据库查询性能的方法。