数据库

《SQL进阶教程》笔记--CASE WHEN

2020-03-09  本文已影响0人  JonWang_js

分为两种
简单表达式:

CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END

搜索表达式(一般都用搜索表达式来写):

CASE WHEN
sex = '1' THEN '男'
sex = '2' THEN '女'
ELSE '其他' END

WHEN 子句要注意排他性

CASE WHEN  col1 IN ('a','b')  THEN '1'
          WHEN col1 = ''b'          THEN '2'
ELSE '其他' END

注意事项:
1.分支的返回数据类型一致;
2.不要忘记写END;
3.养成写ELSE子句的习惯。

--市级编号转化为省地区编号(1)
SELET CASE city_name
    WHEN '安庆' THEN '安徽'
    WHEN '南京' THEN '江苏'
    ELSE '其他' END
    sum(population)
    FROM Tablename
GROUP by CASE city_name
    WHEN '安庆' THEN '安徽'
    WHEN '南京' THEN '江苏'
    ELSE '其他' END;  

用一条语句进行不同条件的统计(行转列):

  SELECT city_name,
      SUM(WHEN sex = '1' THEN population ELSE 0 END) as "男",
      SUM(WHEN sex = '2' THEN population ELSE 0 END) as "女"
      FROM Tablename
  GROUP BY city_name;

新手用 WHERE 子句进行条件分支,高手用 SELECT 子句进行条件分支。

  --用CASE WHEN 写正确的更新操作:
  UPDATE tableA SET col1 = CASE WHEN col1 >=5 
                                             THEN col1\*0.8
                                             WHEN col1 >=3 and col1<5
                                             THEN col1\*1.1
                                             ELSE col1 END;                                         

可以用在修改主键值的场景等等

其他示例--表之间的数据匹配
表A

col1 col2
1 SQL
2 PYTHON
3 JAVA
4 JS

表B

colA colB
王五 1
王五 2
王五 3
赵四 3
赵四 4
李三 2

结果表

col2 王五 赵四 李三
SQL O × ×
PYTHON O × O
JAVA O O ×
JS × O ×
SELECT tableA.col2,
          CASE WHEN EXISTS (SELECT colB FROM tableB 
                                      WHERE colA = '王五'
                                      AND tableA.col1 = tableB.colB ) THNE 'O'
          ELSE '×' END as "王五”,
          CASE WHEN EXISTS (SELECT colB FROM tableB 
                                      WHERE colA = '赵四'
                                      AND tableA.col1 = tableB.colB ) THNE 'O'
          ELSE '×' END as "赵四”,
          CASE WHEN EXISTS (SELECT colB FROM tableB 
                                      WHERE colA = '李三'
                                      AND tableA.col1 = tableB.colB ) THNE 'O'
          ELSE '×' END as "李三”
          FROM tableA;

HAVING子句写入到SELECT 分支中:

SELECT col1, 
          CASE WHEN COUNT(1) = 1 
                  TEHN MAX(col1)
                  ELSE MAX(CASE WHEN col2 = '3'
                                        THEN  col1
                                        ELSE NULL END)
                  END as clo1_new
          FROM tableA
          GROUP BY col1;

新手用HAVING子句进行条件分支,高手用SELECT子句进行条件分支。

--以上主要摘录自《SQL进阶教程》 MICK 著 吴炎昌 译

上一篇下一篇

猜你喜欢

热点阅读