zoukankan      html  css  js  c++  java
  • SQL---CASE表达式

    CASE表达式是用来判断条件的,条件成立时返回某个值,条件不成立时返回另一个值。

    语法:

    CASE WHEN ComparsionCondition THEN result
         WHEN ComparsionCondition THEN result
    ELSE other
    END

    (注:各分支返回的数据类型需一致。)

    (注:when子句一定要有排他性,因为当when子句为真时,剩余的when子句会被忽略。)

    CASE表达式的用途:

    1,转换现有的编码方式

    例子:

    student_name  score
    Ming          80
    Red           92
    Huzi          100
    Mung          60
    student_name  score
    Ming          良
    Red           优
    Huzi          优
    Mung          中
    SELECT student_name,
                (CASE WHEN score>=90 THEN ''
                          WHEN score<90 AND score>=75 THEN ''
                          WHEN score<75 AND score>=60 THEN ''
                 ELSE '不及格' END) AS score
    FROM Score;

    2,构建交叉表

    例子:

     Date     Result
     1900-1-11900-1-11900-1-11900-1-21900-1-2 胜
              胜  负
     1900-1-1 2   1
     1900-1-2 2   0
    SELECT DISTINCT Date,
    SUM(CASE WHEN Result='' THEN 1 ELSE 0 END) AS '',
    SUM(CASE WHEN Result='' THEN 1 ELSE 0 END) AS ''
    FROM Test
    GROUP BY Date;

    3,行列转换

    product_type sum_price
    clothes       5000
    office        600
    kitchen       10000
    sum_price_clothes sum_price_office sum_price_kitchen
    5000              600              10000
    SELECT SUM(CASE WHEN product_type = '衣服' THEN sale_price
                    ELSE 0 END) AS sum_price_clothes,
                SUM(CASE WHEN product_type = '办公用品' THEN sale_price
                    ELSE 0 END) AS sum_price_office,
                SUM(CASE WHEN product_type = '厨房用品' THEN sale_price
                    ELSE 0 END) AS sum_price_kitchen
    FROM Product;

    4,生成特定排序方式

    例子:对下表按B、D、C、A的顺序进行排序

    item x y z
    A    1 2 3
    B    5 5 2
    C    4 7 1
    D    3 3 8
    SELECT item, x, y, z
    FROM t
    ORDER BY ( CASE WHEN item="B" THEN 1
                               WHEN item="D" THEN 2
                               WHEN item="C" THEN 3
                               WHEN item="A" THEN 4
                               ELSE NULL
                      END );
  • 相关阅读:
    mysql 5.7开启sql日志的配置
    Apache显示目录列表及icons目录的问题
    WebGL学习笔记二——绘制基本图元
    java上传文件类型检测
    binlog
    vs2015下C4819该文件包含不能在当前代码页(936)中表示的字符问题解决
    WebGL学习笔记一
    vs2015 debug时出现 C2039“cout”: 不是“std”的成员
    spring boot实现切割分片上传
    springboot自定义类@Resource注入为null的问题
  • 原文地址:https://www.cnblogs.com/HuZihu/p/12244794.html
Copyright © 2011-2022 走看看