美文网首页SQL
MySQL的CASE WHEN用法

MySQL的CASE WHEN用法

作者: 让数据告诉你 | 来源:发表于2020-12-16 13:56 被阅读0次

在数据分析时经常要用到行转列,此时如果使用case when就会方便很多,case when的熟练使用程度,可以说的判断对SQL操作水平的评定方法之一。
case when的语句在某种程度上可以理解成是if函数的简便逻辑写法,主要有两种模式:
模式一(简单变量表达式):

case <表达式(变量)>
    when <表达式1(变量的值)> then <表达式1(符合变量值的结果)>
    when <表达式2(变量的值)> then <表达式2(符合变量值的结果)>
    when <表达式3(变量的值)> then <表达式3(符合变量值的结果)>
...
   else <表达式(符合变量值的结果)>
end

模式二(搜索变量表达式):

case 
    when <求值表达式1(一般是判断)> then <表达式1(符合变量值的结果)>
    when <求值表达式2(一般是判断)> then <表达式2(符合变量值的结果)>
    when <求值表达式3(一般是判断)> then <表达式3(符合变量值的结果)>
...
   else <表达式(符合变量值的结果)>
end

通常情况下,模式二的方式会更加灵活,在工作中也推荐使用模式二的写法(特别是如果有使用Tableau等软件制作参数的时候,语法跟模式二的相同的)。

看具体的例子:

原表

如果现在想要看不同学生的平均分和每个课程的成绩,并且不同课程按列进行显示,要怎么操作呢?

如何按此种方式显示

这个时候,使用case when就很方便了

SELECT 
    st.s_id'学号'
    ,st.s_name'姓名'
    ,SUM(CASE WHEN c.c_name='语文' THEN sc.s_score else null end)语文 
    ,SUM(CASE WHEN c.c_name='数学' THEN sc.s_score else null end)数学
    ,SUM(CASE WHEN c.c_name='英语' THEN sc.s_score else null end)英语
    ,AVG(sc.s_score)平均分
-- 使用SUM是为了提取聚合值(case when之后的值是多个,但是又很多空值,使用聚合函数提取一个值)
FROM student as st
INNER JOIN score as sc ON st.s_id=sc.s_id
INNER JOIN course as c ON sc.c_id=c.c_id  
GROUP BY st.s_id,st.s_name
ORDER BY AVG(sc.s_score) DESC
-- 这个是数据库多个表连接,并按照平均值降序排列
case when后的结果

当然了,也可以使用case when对学生的成绩进行优良中差的判断,这个在工作中的使用场景也是蛮多的,如果有兴趣的同学可以自己试着练习看看。

这个就是case when在MySQL中的常用用法。

相关文章

网友评论

    本文标题:MySQL的CASE WHEN用法

    本文链接:https://www.haomeiwen.com/subject/fvmngktx.html