mysql: case when
1.简单函数
1. 枚举值替换
将字段的指定值替换为新值,需要枚举所有字段值
用法: case column_name when value1 then new_value1 else new_value2 end alias_name
eg: 将表中性别字段的枚举值替换为男,女
SELECT NAME,
CASE sex
WHEN 1 THEN
'男'
WHEN 0 THEN
'女' ELSE '未知'
END sex
FROM `student`;
2. 搜索函数
将符合条件的数据替换为指定值
1. 字段替换为指定值
用法: case when expr1 then new_value1 when expr2 then new_value2 else new_value3 end alias_name
eg: 将age字段的数字替换小孩,青年,中年,老年
SELECT NAME,
CASE
WHEN age < 20 THEN
'小孩'
WHEN age < 30 THEN
'青年'
WHEN age < 50 THEN
'中年' ELSE '老年'
END age FROM `student`;
2. 聚合指定字段
这种场景下一般配合group by使用, 对记录进行分组后, 对每组数据的特定记录进行求和或者计数
如果没有group by ,简单查询可以直接通过where进行过滤
1. 联合sum求和
对符合条件的记录的某个字段进行求和操作
eg: 计算每个城市男性的年龄总和,先判断sex是否等于1, 等于的时候累加age字段
SELECT
city,sum( CASE WHEN sex = 1 THEN age ELSE NULL END ) totalAge
FROM
`student`
GROUP BY
city;
2. 联合count计数
对符合条件的记录的记录进行计数操作
eg: 计算每个城市男性总数,先判断sex是否等于1, 等于的时候累计这条记录
SELECT
city,count( CASE WHEN sex = 1 THEN sex ELSE NULL END ) totalNum
FROM
`student`
GROUP BY
city;
sum关键字通过替换值为1进行累加也能进行计数
SELECT
city,sum( CASE WHEN sex = 1 THEN 1 ELSE 0 END ) totalNum
FROM
`student`
GROUP BY
city;
如果文章对您有所帮助,可以点一下推荐