MySQL中case when 语句条件查询的方法

case
计算条件列表并返回多个可能结果表达式之一。

case 具有两种格式:

简单 case 函数将某个表达式与一组简单表达式进行比较以确定结果。

case 搜索函数计算一组布尔表达式以确定结果。
两种格式都支持可选的 else 参数。

语法
简单 case 函数:

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

case 搜索函数:

case
    when boolean_expression then result_expression
        [ ...n ]
    [
        else else_result_expression
    end

例如,下面的语句显示中文年月
select getdate() as 日期,case month(getdate())
when 11 then '十一'
when 12 then '十二'
else substring('一二三四五六七八九十', month(getdate()),1)
end+'月' as 月份

下面看个实例

数据表为demotable,字段有id, condition1,condition2,condition3,condition4,condition5

要求是查询demotable中,condition1,condition2,condition3,condition4,condition5五个字段中符合任意两个或两个以上的条件的内容。

可使用case when来实现这个条件,需要嵌套子查询语句

sql语句代码示例如下:
复制代码 代码如下:
select * from demotable
where ((select case 1 when condition1满足条件 then 1 else 0 end from demotable )
+(select case 1 when condition2满足条件 then 1 else 0 end from demotable)
+(select case 1 when condition3满足条件 then 1 else 0 end from demotable)
+(select case 1 when condition4满足条件 then 1 else 0 end from demotable)
+(select case 1 when condition5满足条件 then 1 else 0 end from demotable))>=2

case表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定。如果用在字符串语境中,则返回结果味字符串。如果用在数字语境中,则返回结果为十进制值、实值或整数值。

if(expr1,expr2,expr3)

如果 expr1 是true (expr1 <> 0 and expr1 <> null),则 if()的返回值为expr2; 否则返回值则为 expr3。if() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

mysql教程> select if(1>2,2,3);

-> 3

mysql> select if(1<2,'yes ','no');

-> 'yes'

mysql> select if(strcmp('test','test1'),'no','yes');

-> 'no'

意,为了在 group by 块中使用 case,查询语句需要在 group by 块中重复 select 块中的 case 块。

 

时间: 2024-10-20 09:22:19

MySQL中case when 语句条件查询的方法的相关文章

mysql中case 和if的用法

问题描述 mysql中case 和if的用法 这是我想要写的,但是case when里面是不是只能写一个条件?我想要两个条件去判断,返回一列.用if怎么写呢? 解决方案 不是,你这样写就是可以的. 解决方案二: 可以用when and,最好用括号括起来,然后就是检查你的判断条件是否正确 SELECT table1.id, table1.name, CASE WHEN (table1.event = 'r' AND table1.name='Jones') THEN 'very high' WHE

MySQL中优化sql语句查询常用的30种方法

本篇文章是对MySQL中优化sql语句查询常用的30种方法进行了详细的分析介绍,需要的朋友参考下   1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以

MySQL 的CASE WHEN 语句使用说明_Mysql

mysql数据库中CASE WHEN语句. case when语句,用于计算条件列表并返回多个可能结果表达式之一. CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果. CASE 搜索函数计算一组布尔表达式以确定结果. 两种格式都支持可选的 ELSE 参数. 语法简单 CASE 函数: 复制代码 代码如下: CASE input_expression    WHEN when_expression THEN result_expression      

浅谈mysql中多表不关联查询的实现方法_Mysql

大家在使用MySQL查询时正常是直接一个表的查询,要不然也就是多表的关联查询,使用到了左联结(left join).右联结(right join).内联结(inner join).外联结(outer join).这种都是两个表之间有一定关联,也就是我们常常说的有一个外键对应关系,可以使用到 a.id = b.aId这种语句去写的关系了.这种是大家常常使用的,可是有时候我们会需要去同时查询两个或者是多个表的时候,这些表又是没有互相关联的,比如要查user表和user_history表中的某一些数据

MySQL中create table语句的基本语法是_php基础

MySQL中create table语句的基本语法是:  Create [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]  [table_options] [select_statement]  TEMPORARY:该关键字表示用create table新建的表为临时表,此表在当前会话结束后将自动消失.临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用.  IF NOT EX

ii-YII中多条件查询的方法

问题描述 YII中多条件查询的方法 比如:$criteria->addCondition("id=1"); //查询条件,即where id = 1 现在想查询 id为1 和 name为zhangsan 的怎么写查询条件呢,就是怎么查询多个条件呢? 解决方案 YII中自定义查询条件Linq 多条件模糊查询的方法Yii中CDbCriteria查询条件收集 解决方案二: addCondition("id=1 && name='zhangsan '"

MySQL中使用SQL语句对字段进行重命名_Mysql

MySQL中,如何使用SQL语句来对表中某一个字段进行重命名呢?我们将使用alter table 这一SQL语句. 重命名字段的语法为:alter table <表名> change <字段名> <字段新名称> <字段的类型>. 现在我们来尝试把test表中的t_name字段重命名为t_name_new字段. 1.首先查看一下当前test表的结构 mysql> describe test; +------------+-------------+---

MySQL中使用SQL语句查看某个表的编码方法_Mysql

MySQL中,如何使用SQL语句来查看某个表的编码呢?我们使用show create table 这一SQL语句来解决这个问题. show create table可以查看创建这个表的SQL语句脚本,它的基本语法是: show create table <表名>; 我们用它看看test表的create脚本: mysql> show create table test; +-------+--------------------------------------------- -----

net-用个EF框架的泛形类(BaseDal),按条件查询 的方法,排序的lambda表达式不知道写

问题描述 用个EF框架的泛形类(BaseDal),按条件查询 的方法,排序的lambda表达式不知道写 .net的mvc开发中,我用了一个EF框架的泛形类(BaseDal),我在里面写了一个按条件查询 的方法,但是那个排序的lambda表达式我不知道写 public static List<T> GetPageListBy<TKey>(int pageIndex, int pageSize, ref int rowCount, System.Linq.Expressions.Exp