sql 工作实践 踩坑点总结-1

1.条件统计数据


问题描述:创建临时数据表时,设定一列进行区分,后续统计时想加上这个条件,尝试了case when 不太可行,经查询,发现可以使用if条件。


解决方法:例如

count(if(a.y='2022' and a.leixing='对外付款',TRUE,NULL)) as 2022对外付款承兑交易笔数,
sum(if( a.y='2022' and a.leixing='对外付款',a.amount,0)) as 2022对外付款承兑交易金额

 问题就解决了。
但是不知道为什么这个可以:

sum(case when d.REL_PARENT_ORG_NAME like '%qw%' then A.AMT else 0 end) as qw代发金额,
sum(case when d.REL_PARENT_ORG_NAME like '%qw%' then 0 else A.AMT end) as 非qw代发金额,
COUNT(case when d.REL_PARENT_ORG_NAME like '%qw%' then 1 else null end) as qw代发笔数,
COUNT(case when d.REL_PARENT_ORG_NAME like '%qw%' then null else 1 end) as 非qw代发笔数
2.Sql报错:不合规的数据


问题描述:在建好临时表后,运行过程中发现sql报错,存在不合规的数据,在查询错误的过程中,先排除正确的数据项,找到出现问题的一列,在通过排序来确认是否这一列数据存在不合规情况。(排序可以 order by 4 desc 这里的4指列表第几列),发现果然数值列中存在字符或者NULL不能满足后续操作。


解决方法:限制这里一列取到的数据必须为数值:

ascii(a.RECP_amount) between 48 and 57
3.Group by的替代方案,parttion by 
sum(代发金额)over(partition by 商户号) as 累计代发金额
4.Rownumber函数取已经分组的数据中每组数据的前几个


例如:
先在数据表中加上row_num这一列

row_number() over(partition by 商户号 order by 代发笔数 desc) as rownum

然后嵌套一层,删选条件如下:

where q.rownum<2

即可取出每个组中的每个商户号下最大代发笔数的一条数据。


5.判断条件:某个数据项不在某个表以内
 
where a.RECV_PSN_ACCT_ID not in (select 字段项 from 表)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值