- case…when…then
简单的case函数:
case sex
when '1' then '男'
when '2' then '女'
else '未输入' end
case搜索函数:
case
when sex = '1' then '男'
when sex = '2''then '女'
else '未输入' end;
case...when...then 使用场景:
#有people表如下:
id name sex
1 张三 1
2 李四 1
3 王五
4 小花 2
#1.希望将表中的数字表示方式换成汉字
select id,name,sex,#(此处一定要加,相当于select id,name,sex,sex as 性别 from people;)
(case sex
when '1' then '男'
when '2''then '女'
else '未输入'
end
)性别
from people;
#查询结果如下:
id name sex 性别
1 张三 1 男
2 李四 1 男
3 王五 未输入
4 小花 2 女
#如果想省去sex,语句如下:
select id, name,#(此处一定要加,)
(case sex
when '1' then '男'
when '2''then '女'
else '未输入'
end
)性别
from people case;
#sum()和case结合实现分段统计
select
sum(case when sex='1' then 1 else 0 end )男,
sum(case when sex='2' then 1 else 0 end )女,
sum(case when sex<>'1' and sex<>'2' then 1 else 0 end )未输入
from people;
#以下语句同样效果
select
sum(sex='1')男,
sum(sex='2')女,
sum(sex<>'1' and sex<>'2')未输入
from people;
结果如下:
- 对null值的忽略
除了count(*),其他的函数基本都会忽略有null值的记录
count(*),不会忽略null值和重复的记录
count(表达式)忽略null值记录
avg()函数忽略null值记录
sum()忽略null值的记录
值得注意的是:null和''(空)在sql中是不一样的,如果开始性别没输入,这时候是个null值,
sum(case when sex<>'1' and sex<>'2' then 1 else 0 end )未输入
语句统计的结果将会为0
改为sum(case when sex is null then 1 else 0 end )未输入,未输入才会被统计为1.
当sex列里面添加了值,之后将值删除,此时为空
sum(case when sex<>'1' and sex<>'2' then 1 else 0 end )未输入的统计结果才为1
#count()函数和case也可同样结合使用
select
count(case when sex='1' then 1 end )男,
count(case when sex='2' then 1 end )女,
count(case when sex<>'1' and sex<>'2' then 1 end )未输入
from people;
#以下语句效果相同:
select
count( case when sex='1' then 1 else null end)男,
count( case when sex='2' then 1 else null end)女,
count( case when sex<>'1' and sex<>'2' then 1 else null end)未输入
from people;
注:else后面如果不是null的话,也会参与计算,所以写成else 0是错误的。
- concat
1.concat(str1,str2,str3...)将多个字符串连接成一个字符串
2.concat_ws()函数,可以指定分隔符
concat_ws(separator, str1, str2, ...)
3.group_concat()函数
将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
- foreach(循环取值,一般同in结合使用)
<select id="selectProvinceByStoreNumber" parameterType="java.util.List" resultType="cn.smb.web.store.model.StoreEntity">
SELECT
province,
storeNumber
FROM
store
where storeNumber in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
collection:传过来的集合
item:每次循环将循环出的值放入这个变量中
open:以什么开始
separator:用什么分割;
close:以什么结尾
本文地址:https://blog.csdn.net/qq_45074129/article/details/112606841