SQL去重的四种方法

去重是指:查询的时候, 不显示重复,并不是删除表中的重复项
数据表:
在这里插入图片描述
方法1:distinct去重
作用:只能一列去重,当distinct后跟大于1个参数时,他们之间的关系是&&(逻辑与)关系,只有全部条件相同才会去重
弊端:当查询的字段比较多时,distinct会作用多个字段,导致去重条件增多
代码:

select distinct UserResult from Table1

在这里插入图片描述
方法2:group by去重
作用:将重复的行进行分组,相同的数据只显示第一行
弊端:使用group by后,所有查询字段都需要使用聚合函数,比较繁琐
注意点:这样去除之后的数据是保留的第一条重复的数据,如果想保留最后一条数据,将min()改成max(),此为,如果存在null的情况,如果获取最后一条数据中有空字段时,如果想拿空值,数据库会自动拿上一个值填充空值
代码:

select  min(UserName)UserName,min(UserSex)UserSex,min(UserSubject)UserSubject,min(UserResult)UserResult from Table1
group by UserResult

在这里插入图片描述

方法3:使用函数:row_number() over (parttion by 分组列 order by 排序列)
作用:先根据重复列进行分组,分组后再进行排序,不同的组序号为1,相同的组序号为2,排除为2的就达到了去重效果
缺点:需要8.0以上的数据库才能支持写法
代码:

select *from
(
--查询出重复行
select *,row_number() over (partition by UserResult order by UserResult desc)num from Table1
)A
where A.num=1

在这里插入图片描述
方法4:方法3的进阶
代码:一张表a,开始时间是b,用户姓名c

select a.* from a join(select c, max(b) as max b from a group by c ) b
on a.c = b.c and
a.b = b.max b

原理:先根据要去重的字段姓名,和唯一字段时间,拿到最后一个值,然后根据这个值,作为链接查询的关系,自连,从而完成拿到最后一条数据

5.删除重复数据,只保留一条数据的写法:
Oracle数据库的写法:

DELETE 
FROM
	dept 
WHERE
	dname IN ( SELECT dname FROM dept GROUP BY dname HAVING count( dname ) > 1 ) -- 过滤出重复的dname
	AND deptno NOT IN ( SELECT min( deptno ) AS deptno FROM dept GROUP BY dname HAVING count( dname ) > 1 ) -- 

过滤出不在需要保留的id之外的所有id

MySQL数据库:

DELETE 
FROM
	dept 
WHERE
	dname IN ( SELECT * FROM ( SELECT dname FROM dept GROUP BY dname HAVING count( dname ) > 1 ) a ) 
	AND deptno NOT IN ( SELECT * FROM ( SELECT min( deptno ) AS deptno FROM dept GROUP BY dname HAVING count( dname ) > 1 ) b )

相关推荐

  1. List方法

    2024-07-12 20:06:04       37 阅读
  2. List数据4有效方法

    2024-07-12 20:06:04       43 阅读
  3. js 数组6方法

    2024-07-12 20:06:04       30 阅读
  4. js数组(4方法)

    2024-07-12 20:06:04       19 阅读
  5. go语言切片3方式总结

    2024-07-12 20:06:04       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 20:06:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 20:06:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 20:06:04       58 阅读
  4. Python语言-面向对象

    2024-07-12 20:06:04       69 阅读

热门阅读

  1. 【cnocr的安装使用】

    2024-07-12 20:06:04       20 阅读
  2. c#获取本机的MAC地址(附源码)

    2024-07-12 20:06:04       20 阅读
  3. C++ --> 类和对象(二)

    2024-07-12 20:06:04       21 阅读
  4. ListView

    ListView

    2024-07-12 20:06:04      17 阅读
  5. 低代码:架起产教融合的“立交桥”

    2024-07-12 20:06:04       23 阅读
  6. Vue使用vue-cropper裁剪图片作头像

    2024-07-12 20:06:04       22 阅读