zoukankan      html  css  js  c++  java
  • CASE WHEN 及 SELECT CASE WHEN的用法

    sql中的CASE WHEN then 也可以理解为程序中的三元表达式,可以实现相同的功能,不过CASE WHEN then功能更强大

    示例一

    简单Case函数
    CASE sex
    WHEN '1' THEN '男'
    WHEN '2' THEN '女'
    ELSE '其他' END
     
    --Case搜索函数 
    CASE WHEN sex = '1' THEN '男' 
    WHEN sex = '2' THEN '女' 
    ELSE '其他' END  

    示例二

    根据这个国家人口数据,统计亚洲和北美洲的人口数量

    如果使用Case函数,SQL代码如下:

    SELECT  SUM(population), 
    CASE country  WHEN '中国' THEN '亚洲' 
      WHEN '印度' THEN '亚洲' 
      WHEN '日本' THEN '亚洲' 
      WHEN '美国' THEN '北美洲' 
      WHEN '加拿大'  THEN '北美洲' 
      WHEN '墨西哥'  THEN '北美洲' 
    ELSE '其他' END 
    FROM    Table_A 
    GROUP BY
    CASE country 
    WHEN '中国' THEN '亚洲' 
    WHEN '印度' THEN '亚洲'
    WHEN '日本' THEN '亚洲' 
    WHEN '美国' THEN '北美洲' 
    WHEN '加拿大'   THEN '北美洲' 
    WHEN '墨西哥'   THEN '北美洲' 
    ELSE '其他' END

    示例三

    用一个SQL语句完成不同条件的分组。

    按照国家和性别进行分组

    SELECT country, 
    SUM( CASE WHEN sex = '1' THEN  population ELSE 0 END),  --男性人口 
    SUM( CASE WHEN sex = '2' THEN  population ELSE 0 END)   --女性人口
    FROM  Table_A  GROUP BY country; 

    示例四

    两个表数据是否一致的检查。

     在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等

    Case函数不同于DECODE函数。在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等。比如说使用IN,EXISTS,可以进行子查询,从而 实现更多的功能。
    下面具个例子来说明,有两个表,tbl_A,tbl_B,两个表中都有keyCol列。现在我们对两个表进行比较,tbl_A中的keyCol列的数据如果在tbl_B的keyCol列的数据中可以找到,返回结果'Matched',如果没有找到,返回结果'Unmatched'。
    要实现下面这个功能,可以使用下面两条语句
    --使用IN的时候 
    SELECT keyCol, 
    CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )  THEN 'Matched' 
    ELSE 'Unmatched' END Label 
    FROM tbl_A; 

    --使用EXISTS的时候
    SELECT keyCol,
    CASE WHEN EXISTS ( SELECT * FROM tbl_B WHERE tbl_A.keyCol = tbl_B.keyCol ) THEN 'Matched' ELSE 'Unmatched' END Label
    FROM tbl_A;

    总结

    select 与 case结合使用最大的好处有两点,一是在显示查询结果时可以灵活的组织格式,二是有效避免了多次对同一个表或几个表的访问。

  • 相关阅读:
    PAT乙级1008. 数组元素循环右移问题 (20)
    PAT乙级1007. 素数对猜想 (20)
    PAT乙级1006. 换个格式输出整数 (15)
    ubuntu mate 开机自动启动ssh服务
    ubuntu 修改网卡名称
    ubuntu 绑定固定ip
    ubuntu sogou 輸入法無法輸入文字,解決辦法【转载】
    select()函数小结【转载】
    listen函数小结
    python学习过程二(《python核心编程》第三章)
  • 原文地址:https://www.cnblogs.com/starts/p/5087387.html
Copyright © 2011-2022 走看看