MySQL CASE 表达式

  1. CASE 表达式是什么?
  2. 怎样使用 CASE 表达式?

1.CASE 表达式是什么?

CASE 表达式是sql语言分情况讨论的一种表达形式。
CASE 表达式有两种:

  • 一种是类似编程的 switch case。 SQL 中称为简单 CASE 表达式
  • 一种是类似于 IF 语句的根据条件表达式进行判断。 SQL 语言称为搜索 CASE 表达式

2. 如何使用 CASE 表达式?

分别就简单 CASE 表达式和搜索 CASE 表达式使用方式

2.1 简单 CASE 表达式

类似编程的 switch case 的方式

CASE value
WHEN compare_value_1 THEN result_1
WHEN compare_value_2 THEN result_2
…
ELSE result END

根据一个 valuecompare_value_1 进行比较。满足的话就进入 THEN 之后的表达式中,不满足的话就进入 ELSE

SELECT 
    CASE position
        WHEN  主任医师  THEN 1
        ELSE 0
    END AS is_p
FROM
    doctor

根据 position 的值进行判断返回 1 或者是 0

ELSE可以省略 END 不能省略

2.2 搜索 CASE 表达式

IF类型的 CASE 表达式

CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
…
ELSE result END

此时自上而下根据condition判断,取对应的值,都不满足的时候取最后的result。
例子:

SELECT 
    customerName, state, country
FROM
    customers
ORDER BY (
CASE
    WHEN state IS NULL THEN country
    ELSE state
END);

另一个例子,动态聚合函数的输入:

SELECT 
    SUM(CASE
        WHEN status =  Shipped  THEN 1
        ELSE 0
    END) AS  Shipped ,
    SUM(CASE
        WHEN status =  On Hold  THEN 1
        ELSE 0
    END) AS  On Hold ,
    SUM(CASE
        WHEN status =  In Process  THEN 1
        ELSE 0
    END) AS  In Process ,
    SUM(CASE
        WHEN status =  Resolved  THEN 1
        ELSE 0
    END) AS  Resolved ,
    SUM(CASE
        WHEN status =  Cancelled  THEN 1
        ELSE 0
    END) AS  Cancelled ,
    SUM(CASE
        WHEN status =  Disputed  THEN 1
        ELSE 0
    END) AS  Disputed ,
    COUNT(*) AS Total
FROM
    orders;

CASE与IFNULL

MySQL中还有一个IFNULL表达式,其格式如下:

IFNULL(expression_1,expression_2);

其逻辑为:如果expression_1 为null,则返回expression_1,否则返回expression_2.
例如:

SELECT 
    IFNULL(education,  -1 ) AS e_type
FROM
    doctor;

上述语句中,如果education is null ,则返回-1,反则返回-1。

如果使用CASE来表达:

SELECT 
    CASE
        WHEN education IS NULL THEN  -1 
        ELSE education
    END AS e_type
FROM
    doctor;

CASE与IF

实际上,IFNULL的通用形式是IF表达式,其格式为

IF(condition,expression_1,expression_2)

类似于Java中的三元操作符,其逻辑为:如果condition为true,返回expression_1,否则 返回expression_2.
例如:

SELECT 
    IF(education IS NULL,  -1  ,  1 ) AS e_type
FROM
    doctor;

如果使用CASE来表达:

SELECT 
    CASE
        WHEN education IS NULL THEN  -1 
        ELSE  1 
    END AS e_type
FROM
    doctor;

© 版权声明

相关文章

暂无评论

none
暂无评论...