不知道的SQL语句的积累(sql函数的使用)

  • 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   张三    12   李四    13   王五         未输入
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

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐