欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-26 08:14:55
case…when…then简单的case函数:case sex when '1' then '男'when '2' then '女'else '未输入' endcase搜索函数:casewhen sex = '1' then '男'when sex = '2''then '女'else '未输入' end;case...when...then 使用场景:#有user表如下:id name sex1 张三 12 李四 13 ....
  • 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;

结果如下:
不知道的SQL语句的积累(sql函数的使用)

  • 对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