mysql-函数CASE WHEN 统计多个字段

case when语句,用于计算条件列表并返回多个可能结果表达式之一。
CASE 具有两种格式:
1、简单 case 函数:

case input_expression
    when when_expression then result_expression
        [ ...n ]
    [ 
        else else_result_expression
    end

2、case 搜索函数:

case    
    when Boolean_expression then result_expression
        [ ...n ]
    [ 
        esle else_result_expression
    end    

参数:
input_expression

    是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的SQL表达式。

when when_expression

  使用简单 CASE 格式时 input_expression 所比较的简单表达式。when_expression 是任意有效的SQL表达式。input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。

[ ...n ]占位符

  可以使用多个 when when_expression then result_expression 子句或 WHEN boolean_expression THEN result_expression 子句


then result_expression

  当 input_expression = when_expression 取值为 true,或者 boolean_expression 取值为 true 时返回的表达式。
result expression 是任意有效的sql表达式。

esle else_result_expression

  当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。else_result_expression 是任意有效的sql表达式。Else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。

when Boolean_expression

  使用 case 搜索格式时所计算的布尔表达式。boolean_expression 是任意有效的布尔表达式。

结果类型

从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型
创建要操作函数使用的表:

drop table if exists test_list;
create table test_list(
id int primary key auto_increment comment 'id自增',
age int not null comment'年龄',
name varchar(225) not null,
sex int not null default '1' comment'性别1男,2是女'

)engine=MyISAM default charset=utf8 comment'测试查询函数表';
insert into test_list values(1,10,'张一',1),(2,15,'张二',2),(3,20,'张三',1),(4,25,'张四',2),(5,30,'张五',1);

简单 case函数实例:

-- 统计年龄,姓名条件的
select count(case age when 10 then age else null end) as age_num,count(case name when '张五' then name end) as name_num from test_list;

case 搜索函数实例:

-- 统计年龄,姓名条件的
select count(case when age between 10 and 30 then age else null end) as age_num,count(case when name='张五' then name end) as name_num from test_list;

排序使用case when 搜索函数:

-- case 排序
select * from test_list order by case when age>10 then sex  end desc;
MySQL中,`CASE WHEN`语句用于条件判断并返回基于特定条件的值。它可以用于单个字段,但在处理多个字段或需要复杂条件查询时,通常我们使用的是`IF()`函数或者是结合`UNION`这样的操作,而不是直接将多个`WHEN`子句应用于多个字段。以下是针对单个字段的例子: ```sql SELECT column_name, IF(column_name > some_value, 'Higher', 'Lower') AS comparison_result FROM table_name; ``` 如果你想根据几个条件对数据进行分段,并生成多个结果集,可以考虑使用`UNION`来组合查询结果: ```sql SELECT field1, field2 FROM ( SELECT field1, field2, 'ConditionA' FROM your_table WHERE condition_for_A ) a UNION ALL SELECT field1, field2 FROM ( SELECT field1, field2, 'ConditionB' FROM your_table WHERE condition_for_B ) b UNION ALL SELECT field1, field2 FROM ( SELECT field1, field2, 'DefaultCondition' FROM your_table ); ``` 在这个例子中,每个内部查询都只包含满足特定条件的记录,并附上相应的标签(如 'ConditionA'、'ConditionB' 或 'DefaultCondition'),外部查询通过 `UNION ALL` 来合并这些结果。 如果你是在问如何在单一查询中应用多条件判断到多个字段,通常的做法会涉及更复杂的逻辑构建,这可能包括使用多个`CASE WHEN`语句或结合其他聚合函数等。例如,假设你需要根据两个字段的不同情况来计算总分: ```sql SELECT column1, column2, CASE WHEN column1 > 50 AND column2 > 50 THEN (column1 + column2) WHEN column1 > 50 THEN column1 * 2 ELSE column2 * 2 END as total_score FROM your_table; ``` 这个示例中,`CASE`语句根据`column1`和`column2`的值进行不同的计算规则。请注意,实际的应用场景可能会要求更精确的逻辑设计,上述内容仅供参考。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值