数据如下:
一、统计出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的长度。**