首先因为需要查询很多字段,也就排除了使用distinct的可能性。
1.1 原始sql
selectfinalSql.*from (select ''SMS_CONTENT,'2' as短信发出类型_批量发出,
yqdz.yqdz_hz_mc 短信接收方姓名,case
when wc.JTDH is not null thenwc.JTDHwhen wc.XIAOLINGTONG is not null thenwc.XIAOLINGTONGwhen wc.SJ is not null thenwc.SJend短信接受方手机号,''业务对象ID,
yqdz.org_id 区分码fromyongqidizhi yqdzleft joinkehuview wcon wc.Y_ID =yqdz.yqdz_kh_idleft joinranqibiao rqbon rqb.RQB_YQDZ_ID =yqdz.yqdz_idwhere (wc.JTDH is not null or wc.XIAOLINGTONG is not null orwc.SJis not null)and yqdz.yqdz_kh_lx = '2') finalSqlwhere length(trim(finalSql.短信接受方手机号)) = 11
1.2 查询结果
很显然存在重复项
1.3 查询总数
2.1 修改sql
selectfinalSql.SMS_CONTENT,
finalSql.短信发出类型_批量发出,
finalSql.短信接收方姓名,
finalSql.短信接受方手机号,
finalSql.业务对象ID,
finalSql.区分码,count(*) as次数from (select ''SMS_CONTENT,'2' as短信发出类型_批量发出,
yqdz.yqdz_hz_mc 短信接收方姓名,case
when wc.JTDH is not null thenwc.JTDHwhen wc.XIAOLINGTONG is not null thenwc.XIAOLINGTONGwhen wc.SJ is not null thenwc.SJend短信接受方手机号,''业务对象ID,
yqdz.org_id 区分码fromyongqidizhi yqdzleft joinkehuview wcon wc.Y_ID =yqdz.yqdz_kh_idleft joinranqibiao rqbon rqb.RQB_YQDZ_ID =yqdz.yqdz_idwhere (wc.JTDH is not null or wc.XIAOLINGTONG is not null orwc.SJis not null)and yqdz.yqdz_kh_lx = '2') finalSqlwhere length(trim(finalSql.短信接受方手机号)) = 11
group byfinalSql.SMS_CONTENT,
finalSql.短信发出类型_批量发出,
finalSql.短信接收方姓名,
finalSql.短信接受方手机号,
finalSql.业务对象ID,
finalSql.区分码order by 次数 desc
2.2 查询结果:
我是根据手机号进行分组的,很显然,这里存在很多的垃圾数据,我们需要将这些相同的数据只保留一条
2.3 查询总的记录数
3.1 因为返回结果并不需要“count(*)” 这个字段,因此在最外层再加一层查询,改进sql如下
selectfinalSql2.SMS_CONTENT,
finalSql2.短信发出类型_批量发出,
finalSql2.短信接收方姓名,
finalSql2.短信接受方手机号,
finalSql2.业务对象ID,
finalSql2.区分码from (selectfinalSql.SMS_CONTENT,
finalSql.短信发出类型_批量发出,
finalSql.短信接收方姓名,
finalSql.短信接受方手机号,
finalSql.业务对象ID,
finalSql.区分码,count(*) as次数from (select ''SMS_CONTENT,'2' as短信发出类型_批量发出,
yqdz.yqdz_hz_mc 短信接收方姓名,case
when wc.JTDH is not null thenwc.JTDHwhen wc.XIAOLINGTONG is not null thenwc.XIAOLINGTONGwhen wc.SJ is not null thenwc.SJend短信接受方手机号,''业务对象ID,
yqdz.org_id 区分码fromyongqidizhi yqdzleft joinkehuview wcon wc.Y_ID =yqdz.yqdz_kh_idleft joinranqibiao rqbon rqb.RQB_YQDZ_ID =yqdz.yqdz_idwhere (wc.JTDH is not null or wc.XIAOLINGTONG is not null orwc.SJis not null)and yqdz.yqdz_kh_lx = '2') finalSqlwhere length(trim(finalSql.短信接受方手机号)) = 11
group byfinalSql.SMS_CONTENT,
finalSql.短信发出类型_批量发出,
finalSql.短信接收方姓名,
finalSql.短信接受方手机号,
finalSql.业务对象ID,
finalSql.区分码order by 次数 desc) finalsql2
3.2 查询结果
3.3 查询总数
可见总数与第二步一致,并未缺少数据。
总结,因水平问题,在此只考虑最终查询结果符合要求,并未考虑性能、耗时等其他因素,如有需要,后期再做打算。
如有问题,欢迎大家斧正。