sql 在sum()、count()中判断求和

数据如下:
在这里插入图片描述
一、统计出business_status为ok的 ,并求guarantee_left_amount的和?
常规做法:
sql:

select sum(guarantee_left_amount) as '在保金额'from test_gurantee
where business_status='ok'

由于业务需求,还要统计其他列,一次性返回,不能这样写
结果:
在这里插入图片描述
在这里插入图片描述

SELECT sum( case when business_status='ok' then guarantee_left_amount else 0 end) as  '在保金额'
FROM test_gurantee

结果:
在这里插入图片描述
二、统计出business_status为ok的条数。
sql:

SELECT count(CASE business_status WHEN 'OK' THEN id  END) as '在保笔数'
FROM test_gurantee

结果
在这里插入图片描述
三,统计金额,当为business为ok取left_amount,当为LG取amount的值。

sql;

SELECT sum(CASE business_status  WHEN 'LG' THEN ifnull(guarantee_amount,0) ELSE ifnull(guarantee_left_amount,0) END)
as '累保金额'
FROM test_gurantee

结果:
在这里插入图片描述
四:字符串截取
地区:格式是这样的,我只要凉州区怎么处理呢?
[“620000_甘肃省”,“620600_武威市”,“620602_凉州区”]

 select   SUBSTRING_INDEX(SUBSTRING_INDEX(area,'_',-1),'"',1)  FROM test_gurantee

第一步得到 凉州区”]
在这里插入图片描述
第二步嵌套:

select   SUBSTRING_INDEX(SUBSTRING_INDEX(area,'_',-1),'"',1)  FROM test_gurantee

在这里插入图片描述
解析:
SUBSTRING_INDEX([ “620000_甘肃省”,“620600_武威市”,“620602_凉州区”] ,’_’,-1) 得到 凉州区”]

表示从后面开始数,第一次_出现的位置的取后面的。

SUBSTRING_INDEX(“凉州区”]” , ‘"’,1) 得到 凉州区
总结:如果是正号,从前面数,取前面的,如果是负号,从后面数,取后面的。
其他字符串sql 截取方法:

1、LOCATE(substr , str ):返回子串 substr 在字符串 str
中第一次出现的位置,如果字符substr在字符串str中不存在,则返回0;

2、POSITION(substr  IN str ):返回子串 substr 在字符串 str
中第一次出现的位置,如果字符substr在字符串str中不存在,与LOCATE函数作用相同;斜体样式

3、LEFT(str, length):从左边开始截取str,length是截取的长度;

4、RIGHT(str, length):从右边开始截取str,length是截取的长度;

5、SUBSTRING_INDEX(str  ,substr  ,n):返回字符substr在str中第n次出现位置之前的字符串;

6、SUBSTRING(str  ,n ,m):返回字符串str从第n个字符截取到第m个字符;

7、REPLACE(str, n, m):将字符串str中的n字符替换成m字符;

8、LENGTH(str):计算字符串str的长度。**
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值