• 数据库复习总结(16)-case关键字(数据透视)


    case语法:

    练习1:将性别的0、1显示为男、女

    select * from  StudentInfo
    --case:对结果集中的列进行判断
    --例1:显示学生信息,性别以"男女"显示:
    select *,
        case sGender 
        when 1 then ''
        when 0 then '' end as 性别
    from StudentInfo
    View Code

    结果:

    练习2:显示成绩为“优、良、中、差”

    --例2:将学生分数显示成等级 >=90 优,>=80 良,>=60 中,其它 差
    select *,
        case
        when scoreValue>=60 and scoreValue<80 then ''
        when scoreValue>=90 then ''
        when scoreValue>=80 then ''
        else '' end as 等级
    from ScoreInfo
    View Code

    练习3:统计学生的语文、数学、英语的成绩(视图、聚合函数)

    --查询学生姓名、科目名称、成绩(构建视图)
    --行转列(数据透视)
        --统计学生的语文、数学、英语的成绩
    create view Student_Score
    as
    select stu.sName,sub.sTitle,score.scoreValue
    from ScoreInfo score
    inner join SubjectInfo sub on sub.sId=score.subId
    inner join StudentInfo stu on stu.sId=score.stuId
    
    select * from Student_Score   --查询视图
    
    例子
    --姓名 语文 数学 英语
    --小笼包 100  89  92.5
    
    --数据透视(行转列,列转行)
    select sName 姓名,
    --如果当前的STitle的值是"语文",则输出ScoreValue
    case sTitle when '语文' then scoreValue end 语文,
    case when sTitle='数学' then scoreValue end 数学,
    case sTitle when '英语' then scoreValue end 英语
    from Student_Score
    
    select sName 姓名,
    --如果当前的STitle的值是"语文",则输出ScoreValue
    --多行合并成一行(聚合函数)
    max(case sTitle when '语文' then scoreValue end) 语文,
    min(case when sTitle='数学' then scoreValue end) 数学,
    sum(case sTitle when '英语' then scoreValue end) 英语
     from Student_Score
     group by sName
    View Code

    练习:数据透视

     --班级  男生  女生
    --    青龙     1      2
    --1、创建视图
    create view Student_Class_Gender
    as
    select cTitle,sGender,COUNT(*) as count1
    from StudentInfo stu
    inner join ClassInfo class on stu.cid=class.cId
    group by cTitle,sGender
    
    select * from Student_Class_Gender
    --2、转换
    --转换
    --数据透视(行转列)
    select cTitle,
    case sGender when 1 then count1 else 0 end 男,
    case when sGender=0 then count1 else 0 endfrom Student_Class_Gender
    
    --3、合并
    select cTitle,
    max(case sGender when 1 then count1 else 0 end) 男,
    max(case when sGender=0 then count1 else 0 end) 女
    from Student_Class_Gender
    group by cTitle
    View Code

  • 相关阅读:
    使用Docker搭建nginx环境
    使用Docker搭建apache环境
    字符编码-字库表,字符集,字符编码
    go中的sync.pool源码剖析
    JAVA基础语法
    Linux 文件目录管理
    c++ 学习之常用时间函数一览
    MySQL Innodb 中的锁
    MySQL 索引与 B+ 树
    MySQL 表分区操作详解
  • 原文地址:https://www.cnblogs.com/mhq-martin/p/8178739.html
Copyright © 2020-2023  润新知