当前位置: 首页 > news >正文

SQL对数据进行去重

工作中使用SQL对数据进行处理计算时可能会遇到这样的问题;读取的表数据会有重复,或者我们关注的几个字段的数据会有重复,直接使用原表数据会引起计算结果不准或者做表连接时产生笛卡尔积。
本文记录使用SQL进行数据去重的几种算法。

distinct关键字去重

distinct关键字加在对应字段前可以实现对改字段结果的去重查询,distinct同样可以加在多个字段前实现按照多个字段结果的去重。

-- 单列去重
select distinct field_a 
from tableName;
-- 多列去重
select distinct field_a,field_b,.. 
from tableName;
group by分组去重

使用group by方法进行去重的原理很简单:按照某个或几个字段进行分组,那么每一组(分组字段取值相同)只会保留一条记录,甚至可以在select分组字段后面使用聚合函数产生每组的一个聚合结果。

-- 分组去重实现
select field_a,field_b,field_c 
from tableName 
group by field_a,field_b,field_c;
-- 分组去重后加几列聚合字段
select field_a,field_b,field_c,count(*),count(distinct field_d),sum(field_e) 
from tableName 
group by field_a,field_b,field_c;
窗口函数去重

窗口函数与聚合函数类似,聚合函数作用于分组后,对每组产生一个计算结果,窗口函数在OVER()里定义分组和排序,但是会对其中的每一行记录进行函数计算返回结果,其结果是没有减少原表行数但是也达到了分组排序等计算结果。

-- 窗口函数去重实现
-- row_number()对每组原来n行数据产生1-n对应的排序rk,即使有重复值rk会累加,也不会重复,适合用来去重
with tmp_table as(
select*,row_number() over(partition by field_a,field_b order by field_c) as rk
fromtableName
)selectfield_a,field_b
fromtmp_table
where rk=1;
http://www.lryc.cn/news/229008.html

相关文章:

  • 登录注册代码模板(Vue3+SpringBoot)[邮箱发送验证码(HTML)、RSA 加密解密(支持长文本)、黑暗与亮色主题切换、AOP信息校验]
  • 【计算机网络】VRRP协议理论和配置
  • ubuntu操作系统的docker更换存储目录
  • 【人工智能Ⅰ】6-机器学习之分类
  • 本地部署_语音识别工具_Whisper
  • 秋招求职经验分享
  • DNS域名解析
  • Flink SQL --命令行的使用(02)
  • 【nlp】1.3 文本数据分析(标签数量分布、句子长度分布、词频统计与关键词词云)
  • 路由器的结构以及工作原理
  • DefaultListableBeanFactory
  • NSF服务器
  • 10 Go的映射
  • 瑞萨e2studio(29)----SPI速率解析
  • mysql的主从复制,读写分离
  • 小米路由器4A千兆版刷入OpenWRT并远程访问
  • 【golang】探索for-range遍历实现原理(slice、map、channel)
  • 依赖倒转原则接口隔离原则迪米特法则合成复用原则
  • MATLAB | 官方举办的动图绘制大赛 | 第一周赛情回顾
  • 适配器模式 rust和java的实现
  • 竞赛 题目:垃圾邮件(短信)分类 算法实现 机器学习 深度学习 开题
  • wpf devexpress项目中添加GridControl绑定数据
  • 2023亚太杯数学建模A题思路解析
  • Spark3.0中的AOE、DPP和Hint增强
  • 算法笔记-第五章-质因子分解
  • 适用于WPF的设计模式
  • C++与多态
  • ios 对话框UIAlertController放 tableview
  • 警告:新版Outlook会向微软发送密码、邮件和其他数据
  • 数据结构C语言--基础实验