Hello World

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;
posted @ 2022-03-24 20:07  小小忧愁米粒大  阅读(277)  评论(0编辑  收藏  举报
瞅啥瞅,好好看书