where后面case-when的用法

  1. 准备测试数据,建表语句
    drop table test_table;
    create table test_table
    (
      col_a        NUMBER,
      col_b        NUMBER,
      col_c        VARCHAR2(5)
    )
    
    insert into test_table values(2, 1, '>');
    insert into test_table values(1, 2, '>=');
    insert into test_table values(2, 1, '<');
    insert into test_table values(1, 2, '<=');
    insert into test_table values(2, 2, '=');

     

  2. 测试目的

      主要是想根据某个字段的不同,执行不同的where条件,很明显在Mysql下是可以直接通过case-when来写,但是oracle的case-when则不行,同样的sql修改成oracl的语法就会报错,不支持这种方式。但是如果真的存在这种业务场景,我们可以迂回一下,多走一步来实现这种场景,达到同样的目的。

  1. MySQL数据库
    --Mysql支持这种写法,可以根据关键字来执行不同的条件
    --可以理解case-when函数在Mysql下是可以返回直接执行的表达式
    
    SELECT * FROM test_table WHERE 
    CASE col_c 
      WHEN '>' THEN col_a > col_b
      WHEN '>=' THEN col_a >= col_b
      WHEN '<' THEN col_a < col_b
      WHEN '<=' THEN col_a <= col_b
      WHEN '=' THEN col_a = col_b
    END

     

  2. Oracle
    --Orale数据库的case-when函数则不能返回直接执行的表达式
    --但是我们可以转个弯,在select关键字后,将关键字对应的
    --表达式的计算结果值存为临时列,然后将结果集当一张临时
    --表,在根据where条件去过滤数据
    select col_a, col_b, col_c from (
    select 
     col_a, col_b, col_c,
     (case when (col_c = '>' and (col_a - col_b) > 0) then 1  
        when (col_c = '>=' and (col_a - col_b) >= 0) then 1  
        when (col_c = '=' and (col_a - col_b) = 0) then 1  
        when (col_c = '<' and (col_a - col_b) < 0) then 1  
        when (col_c = '<=' and (col_a - col_b) <= 0) then 1
        else 0 
     end) as temp
    from test_table )
    where temp = 1
    

     

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle中的WHERE CASE WHEN用法是一种条件语句,用于在WHERE子句中根据条件进行筛选。它的语法如下: WHERE CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN END; 其中,condition1、condition2等是条件表达式,result1、result2等是对应条件表达式的结果。如果所有条件都不满足,则返回ELSE后面的结果N。 例如,以下语句将根据不同的条件筛选出不同的结果: SELECT * FROM table_name WHERE CASE WHEN column1 > 10 THEN 'A' WHEN column2 = 'B' THEN 'B' ELSE 'C' END; ### 回答2: Oracle中的WHERE CASE WHEN函数是一种常用的条件逻辑函数,通过它我们可以根据指定的条件进行数据筛选和过滤。在使用WHERE CASE WHEN之前,需要先了解OracleCASE WHEN语句以及WHERE语句的用法CASE WHEN语句用于给定一组条件,并返回与条件匹配的结果。语法如下: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE defaul_result END 其中condition是条件表达式,result是满足条件时的结果,default_result是当条件都不满足时的默认结果。CASE WHEN语句可以嵌套使用,以实现更加复杂的逻辑。 WHERE语句用于筛选满足某些条件的数据行,常用的操作符包括等于(=)、不等于(<>)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、LIKE、IN等。WHERE语句也可以嵌套使用,并通过AND、OR、NOT等逻辑运算符组合多个条件表达式。 在Oracle中,WHERE CASE WHEN语句可以在WHERE语句中作为条件表达式使用。例如,我们可以通过WHERE CASE WHEN进行复杂的条件逻辑筛选,比如: SELECT * FROM employee WHERE CASE WHEN salary > 10000 THEN '高薪人群' WHEN salary > 5000 AND salary <= 10000 THEN '中等薪资人群' ELSE '低收入人群' END = '高薪人群' 以上语句的含义是筛选薪资大于10000的员工信息,同时返回一个描述性的“高薪人群”标签。 总之,在Oracle中,WHERE CASE WHEN语句通过灵活的逻辑判断和条件筛选,可以满足各种复杂查询需求。掌握这一功能将对我们进行数据处理和分析带来巨大便利。 ### 回答3: Oracle中的WHERE CASE WHEN用法是一种强大的条件查询方式,可以根据不同的条件来返回不同的结果。其语法格式如下: ``` SELECT column1, column2, ... FROM table_name WHERE CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE result END; ``` 其中,condition1、condition2等表示不同的条件,result1、result2等表示满足对应条件时返回的结果。ELSE result则表示当所有条件都不满足时返回的结果。 需要注意的是,WHERE CASE WHEN必须在WHERE语句中使用,且它仅能返回一列数据。 下面通过一个例子来说明WHERE CASE WHEN的用法: 假设有一个商品表products,其中包含商品名称(name)和价格(price)两列数据。现在我们要查询商品价格为100元时,对应商品的名称。可以使用以下语句: ``` SELECT name FROM products WHERE CASE WHEN price = 100 THEN 'Y' ELSE 'N' END = 'Y'; ``` 其中,当商品价格为100元时,返回结果为'Y',否则返回结果为'N'。整个查询语句的作用就是根据这个结果是否为'Y'来判断是否满足条件,从而返回对应商品名称。 总之,WHERE CASE WHEN是一种非常灵活且有用的查询方式,在实际应用中可以根据不同的需求灵活运用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值