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

Posted mhq-martin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库复习总结(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

技术分享图片

 

以上是关于数据库复习总结(16)-case关键字(数据透视)的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据透视表选择具有最大值的行

MySQL——case when 的用法,纵向统计数据-类似数据透视表

MySQL——case when 的用法,纵向统计数据-类似数据透视表

数据结构复习总结第八章排序

Oracle 组和数据透视 - Oracle 中的动态数据透视

Java复习总结——数据类型