• 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;
    
  • 相关阅读:
    Oracle 删除某个用户下的对象
    解决11g导出时,空表不能导出问题
    Oracle常用sql
    Oracle 创建表空间和用户
    chapter4.1、函数,参数
    chapter3.6、标准库datetime
    chapter3.5内建函数
    简单选择排序和二元选择排序
    chapter3.4解析式、生成器
    列表解析练习
  • 原文地址:https://www.cnblogs.com/virgosnail/p/16051589.html
Copyright © 2020-2023  润新知