zoukankan      html  css  js  c++  java
  • sql 面试必刷系列-case-when

    Case When 是什么?

    Mysql数据库中CASE WHEN语句,是用于计算条件列表并返回多个可能结果表达式之一。

    case 
     when sex = '1' then '男'
     when sex = '2' then '女'
    else '未知' 
    end
    

    注意:

    (1) 在CASE函数中,else部分的默认值是NULL。

    (2) CASE函数只返回第一个符合条件的值,剩下的CASE部分被自动忽略。

    面试题

    1. 有一个学生表:students(id, name ,birthday, sex, grade),要求按每个年级统计男生和女生的数量各是多少,统计结果的表头为:年级,男生数量,女生数量。
    SELECT grade,
    COUNT (CASE WHEN sex = 1 THEN 1 
    ELSE NULL 
    END) 男生数,
    COUNT (CASE WHEN sex = 2 THEN 1
    ELSE NULL
    END) 女生数
    FROM students
    GROUP BY grade;
    
    1. 有一个表table1(A,B,C),用SQL语句选出两个列,第一列是A、B两列的较大者,第二列是B、C两列的较小者。
    SELECT 
    (CASE WHEN a>b THEN a ELSE b END),
    (CASE WHEN b>c THEN b ELSE c END)
    FROM table1
    
    1. 有一张表table2(语文成绩、数学成绩、英语成绩),请用一条sql语句按以下显示条件得出结果:

    显示条件:大于或等于80显示为优秀,大于或等于60表示及格,小于60分表示不及格。

    显示格式:

    语文 数学 英语

    及格 优秀 不及格

    select
    (case when 语文>=80 then '优秀'
         when 语文>=60 then '及格'
         else '不及格') as 语文,
    (case when 数学>=80 then '优秀'
         when 数学>=60 then '及格'
         else '不及格') as 数学,
    (case when 英语>=80 then '优秀'
         when 英语>=60 then '及格'
         else '不及格') as 英语,
    from table
    
    1. 有如下人口统计数据,要求按照国家和性别进行分组,得出结果如下:
    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 When 总结

    与GROUP BY 结合,自定义列联表统计

    统计每个国家的男女人口数量
    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;
    

    与Group by结合,自定义分组统计

    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;
    

    与distinct结合,去重分组统计

    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;
    

    根据条件有选择的UPDATE

    UPDATE Personnel
    SET salary =
    CASE 
     WHEN salary >= 5000 THEN salary * 0.9 
     WHEN salary >= 2000 AND salary < 4600  THEN salary * 1.15 
    ELSE salary END;
    
  • 相关阅读:
    HTTP Status 500
    并发编程的常见约束
    面试之数据库面试题
    HashMap实现原理
    数据结构二叉树知识点总结
    十大经典排序算法详细总结(含JAVA代码实现)
    tensorflow里面共享变量、name_scope, variable_scope等如何理解
    Mxnet学习资源
    测试1
    tensorflow prelu的实现细节
  • 原文地址:https://www.cnblogs.com/liuyupen/p/13940287.html
Copyright © 2011-2022 走看看