Oracle 查询结果去重保留一项
首先因为需要查询很多字段,也就排除了使用distinct的可能性。
1.1 原始sql
select finalSql.*
from (select '' SMS_CONTENT,
'' as 短信发出类型_批量发出,
yqdz.yqdz_hz_mc 短信接收方姓名,
case
when wc.JTDH is not null then
wc.JTDH
when wc.XIAOLINGTONG is not null then
wc.XIAOLINGTONG
when wc.SJ is not null then
wc.SJ
end 短信接受方手机号,
'' 业务对象ID,
yqdz.org_id 区分码
from yongqidizhi yqdz
left join kehuview wc
on wc.Y_ID = yqdz.yqdz_kh_id
left join ranqibiao rqb
on rqb.RQB_YQDZ_ID = yqdz.yqdz_id
where (wc.JTDH is not null or wc.XIAOLINGTONG is not null or
wc.SJ is not null)
and yqdz.yqdz_kh_lx = '') finalSql
where length(trim(finalSql.短信接受方手机号)) = 11
1.2 查询结果
很显然存在重复项
1.3 查询总数
2.1 修改sql
select finalSql.SMS_CONTENT,
finalSql.短信发出类型_批量发出,
finalSql.短信接收方姓名,
finalSql.短信接受方手机号,
finalSql.业务对象ID,
finalSql.区分码,
count(*) as 次数
from (select '' SMS_CONTENT,
'' as 短信发出类型_批量发出,
yqdz.yqdz_hz_mc 短信接收方姓名,
case
when wc.JTDH is not null then
wc.JTDH
when wc.XIAOLINGTONG is not null then
wc.XIAOLINGTONG
when wc.SJ is not null then
wc.SJ
end 短信接受方手机号,
'' 业务对象ID,
yqdz.org_id 区分码
from yongqidizhi yqdz
left join kehuview wc
on wc.Y_ID = yqdz.yqdz_kh_id
left join ranqibiao rqb
on rqb.RQB_YQDZ_ID = yqdz.yqdz_id
where (wc.JTDH is not null or wc.XIAOLINGTONG is not null or
wc.SJ is not null)
and yqdz.yqdz_kh_lx = '') finalSql
where length(trim(finalSql.短信接受方手机号)) = 11
group by finalSql.SMS_CONTENT,
finalSql.短信发出类型_批量发出,
finalSql.短信接收方姓名,
finalSql.短信接受方手机号,
finalSql.业务对象ID,
finalSql.区分码
order by 次数 desc
2.2 查询结果:
我是根据手机号进行分组的,很显然,这里存在很多的垃圾数据,我们需要将这些相同的数据只保留一条
2.3 查询总的记录数
3.1 因为返回结果并不需要“count(*)” 这个字段,因此在最外层再加一层查询,改进sql如下
select finalSql2.SMS_CONTENT,
finalSql2.短信发出类型_批量发出,
finalSql2.短信接收方姓名,
finalSql2.短信接受方手机号,
finalSql2.业务对象ID,
finalSql2.区分码
from (select finalSql.SMS_CONTENT,
finalSql.短信发出类型_批量发出,
finalSql.短信接收方姓名,
finalSql.短信接受方手机号,
finalSql.业务对象ID,
finalSql.区分码,
count(*) as 次数
from (select '' SMS_CONTENT,
'' as 短信发出类型_批量发出,
yqdz.yqdz_hz_mc 短信接收方姓名,
case
when wc.JTDH is not null then
wc.JTDH
when wc.XIAOLINGTONG is not null then
wc.XIAOLINGTONG
when wc.SJ is not null then
wc.SJ
end 短信接受方手机号,
'' 业务对象ID,
yqdz.org_id 区分码
from yongqidizhi yqdz
left join kehuview wc
on wc.Y_ID = yqdz.yqdz_kh_id
left join ranqibiao rqb
on rqb.RQB_YQDZ_ID = yqdz.yqdz_id
where (wc.JTDH is not null or wc.XIAOLINGTONG is not null or
wc.SJ is not null)
and yqdz.yqdz_kh_lx = '') finalSql
where length(trim(finalSql.短信接受方手机号)) = 11
group by finalSql.SMS_CONTENT,
finalSql.短信发出类型_批量发出,
finalSql.短信接收方姓名,
finalSql.短信接受方手机号,
finalSql.业务对象ID,
finalSql.区分码
order by 次数 desc) finalsql2
3.2 查询结果
3.3 查询总数
可见总数与第二步一致,并未缺少数据。
总结,因水平问题,在此只考虑最终查询结果符合要求,并未考虑性能、耗时等其他因素,如有需要,后期再做打算。
如有问题,欢迎大家斧正。
Oracle 查询结果去重保留一项的更多相关文章
- oracle 多字段去重查询
oracle 多字段去重查询 CreationTime--2018年6月29日15点11分 Author:Marydon 1.情景展示 需要对表BASE_MRI_DEVICE的COMPNAME.F ...
- Oracle查询和问题简记
现在做两个版本的系统,一个用的数据库是Access,另一个就是Oracle了.每个数据库支持的的查询SQL语句都有所区别,这里主要针对Access和Oracle做 记录. 首先贴出遇到问题最多的一条语 ...
- Oracle查询表里的重复数据方法:
一.背景 一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录. 二.解决 select id from group by id having count ...
- Oracle 查询(SELECT)语句(一)
Ø 简介 本文介绍 Oracle 中查询(SELECT)语句的使用,在 SQL 中 SELECT 语句是相对内容较多的,也是相对比较复杂一点的,所以这里拿出来单独学习. 首先,我们先来理一下思路,我 ...
- Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数
Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数 关于处理小数点位数的几个oracle函数()1. 取四舍五入的几位小数select round(1.2345, 3) fr ...
- Oracle查询速度慢的原因总结
Oracle查询速度慢的原因总结 查询速度慢的原因很多,常见如下几种:1,没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2,I/O吞吐量小,形成了瓶颈效应.3,没有创建计算列导致 ...
- [转帖]Oracle 查询各表空间使用情况--完善篇
Oracle 查询各表空间使用情况--完善篇 链接:http://blog.itpub.net/28602568/viewspace-1770577/ 标题: Oracle 查询各表空间使用情况--完 ...
- 保留重复项(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- Oracle打怪升级之路一【Oracle基础、Oracle查询】
前言 背景:2021年马上结束了,在年尾由于工作原因接触到一个政府单位比较传统型的项目,数据库用的是Oracle.需要做的事情其实很简单,首先从大约2000多张表中将表结构及数据导入一个共享库中,其次 ...
随机推荐
- python实践项目十:zipfile模块-将一个文件夹备份到一个 ZIP 文件
描述:将指定路径下的某文件夹备份到一个zip文件 代码: #!/usr/bin/python # -*- coding: UTF-8 -*- # backupToZip - Copies an ent ...
- c++之vector容器入门
对于c++的vector容器的函数应用: #include<string> #include<iostream> #include<vector> using na ...
- TCP/IP学习笔记2--协议分层与OSI参考模型
协议的分层: 为解决不同计算机之间的通信,ISO(International Organization for Standards)指定了一个国际标准OSI(Open Systems Intercon ...
- 06 BootStrap前端开发框架(超级好用)
1.BootStrap概念: 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JavaScript 的,它简洁灵活 ...
- 微信小程序访问豆瓣电影api400错误解决方法
最近在跟着demo学习微信小程序,却卡在了第一步请求豆瓣电影api上,折腾了很久,代码如下: wx.request({ url : "https://api.douban.com/v2/mo ...
- 宁夏网络赛-F-Moving On
https://www.cnblogs.com/31415926535x/p/11440395.html 一道简单的Floyd题,,但是是动态加点求多次有限制的最短路,,感觉这个思想很好,,当然可以直 ...
- laravel中一些非常常用的php artisan命令
php artisan 命令在开发laravel项目中非常常用,下面是一些总结 composer config -g repo.packagist composer https://mirrors.a ...
- PB 计算公式算出结果赋值给另外一列
在数据窗口中添加一个公式列 --在itmchanged事件中写的计算赋值代码 String ls_gs,ls_sqldecimal{2} ls_gsjg if dwo.name='gs1' then ...
- 雪花算法,生成分布式唯一ID
2.3 基于算法实现 [转载] 这里介绍下Twitter的Snowflake算法——snowflake,它把时间戳,工作机器id,序列号组合在一起,以保证在分布式系统中唯一性和自增性. snowfla ...
- 前后端API交互如何保证数据安全性
前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提 ...