Oracle SQL语句 某字段重复数据只取一条

Oracle SQL语句 某字段重复数据只取一条

问题描述

环境:甲方系统用了Oracle,我用的是MySQL。

业务场景:开发中模拟甲方数据库,缺少某视图,遂自行根据部分数据表内容,创建数据。

数据主要有两项内容,一个是name,一个是code,code理论上唯一,一个code只对应一个name(反之不是,name不要求唯一),但是在数据表中,该code并不唯一,这就产生了题目当中的问题,怎么利用sql语句,在某字段有重复数据的情况下,只取其中一条数据?

有人可能会说,code重复,代码逻辑里去掉不就行了吗,为什么一定要要求源数据唯一?

我在代码中当然是有这个去重逻辑的,本文的问题并不是在开发中遇到,而是在测试时,修改某条源数据,目标数据并没有随之改变,

调试发现是源数据唯一code不唯一,我的代码逻辑中是只取第一次出现的code有效值,第二次及之后出现的code都会忽略。

所以想要测试数据修改的状况,要么我把重复源数据全部更改,要么就解决本文的中心问题。

所以,还是做点有技术含量的东西(虽然本文技术含量并不高,但积少成多嘛,至少积累个熟练度)。

思路分析

手写了一条SQL语句,不能用,想起来原来的某段代码中似乎是有去重语句的

sql 复制代码
select id, code
from op
where is_receive = 0
group by id

但是,这是在MySQL中执行的,在Oracle中这个语句是不能用的(MySQL实际查出来的数据也不怎么对其实,不知道是用的什么规则取的group

by以外的字段,理论上有很多组,而且都不一定一样)

我知道还有一个去重的方法,distinct关键字,然而这个关键字只能用在select出的整条记录进行去重,并不能针对某字段进行去重。

最终只能用group by 来做这件事,select的字段,要么是在group中指定的分组依据,要么使用聚集函数。

所有最终方案呼之欲出,group by指定code,聚集函数取name

解决方案

取code很简单,那取name应该用什么聚集函数呢?

答案是:随便,max,min都可以(目前可能只有这两个能取出字段值的通用函数)

sql 复制代码
create view V_ATTR (CODE, NAME) as
select CODE, max(NAME)
from od
where dept = '5'
group by CODE

最后,创建view别忘了起个列lie名(刚刚看成了别名)

声明:本文使用八爪鱼rpa工具从gitee自动搬运本人原创(或摘录,会备注出处)博客,如版式错乱请评论私信,如情况紧急或久未回复请致邮 xkm.0jiejie0@qq.com 并备注原委;引用本人笔记的链接正常情况下均可访问,如打不开请查看该链接末尾的笔记标题(右击链接文本,点击 复制链接地址,在文本编辑工具粘贴查看,也可在搜索框粘贴后直接编辑然后搜索),在本人博客手动搜索该标题即可;如遇任何问题,或有更佳方案,欢迎与我沟通!

相关推荐
霖霖71416 分钟前
【ESP32笔记】工程目录解析
笔记·单片机·mcu·物联网
ss27321 分钟前
PG实战笔记 | 07 PostgreSQL常见编译项及其作用
数据库·笔记·postgresql
沪上企服通21 分钟前
规则引擎版本化:把代账科目映射当 policy-as-code 管(上海 5 家样本对照)
笔记·架构
志尊宝23 分钟前
Vue3 零基础每日笔记(085):项目上线前 Checklist——环境变量、报错监控、安全自查
前端·javascript·笔记·安全·信息可视化·echarts
霖霖71429 分钟前
【ESP32笔记】ADC获取NTC温度
笔记·单片机·mcu·物联网
志尊宝34 分钟前
Vue3 零基础每日笔记(088·完结):从零到一——一个完整 Vue3 项目的成长复盘
前端·javascript·vue.js·笔记·ecmascript·#vue.js
Capricorn198840 分钟前
一段内容查不出对错时:知芽 Notebook Skill 与 SynthID 检测器的边界
大数据·论文阅读·人工智能·笔记
霖霖7141 小时前
【ESP32笔记】SDIO读写TF卡
笔记·单片机·嵌入式硬件·mcu·物联网
星恒随风1 小时前
Linux进程间通信(二):深入理解System V共享内存、消息队列、信号量与内核IPC资源管理
linux·运维·服务器·笔记·学习·状态模式
商业白皮书1 小时前
企业通过API调用大模型,推荐哪些具备数据隐私保护能力的平台?
大数据·人工智能·笔记