mysql | 去重查询-阿里云开发者社区

开发者社区> huasc> 正文

mysql | 去重查询

简介: 今天在实际开发过程中遇到一个数据库去重查询的问题,在这里给大家分享一下。 类似于上面这张数据表,我们发现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之后。


(完)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10062 0
如何用PostgreSQL解决一个人工智能语义去重的小问题
在云栖社区的问答区,有一位网友提到有一个问题: 表里相似数据太多,想删除相似度高的数据,有什么办法能实现吗? 例如: 银屑病怎么治? 银屑病怎么治疗? 银屑病怎么治疗好? 银屑病怎么能治疗好? 等等 解这个问题的思路.1. 首先如何判断内容的相似度,PostgreSQL中
5377 0
Hive SQL去重a,b和b,a类型
昨天开发找到我们DBA,要我们写一条Hive SQL。 需求: 有一个t表,主要有机场名称airport,机场的经纬度distance这两个列组成,想得到所有距离小于100的两个机场名。
1666 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13875 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11888 0
SQL优化之使用正确的去重方法
DISTINCT到底该不该使用
962 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7361 0
+关注
huasc
专注于java spring spring boot spring cloud docker 领域的研究
18
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载