论坛上的题目--类似于行列转换的,给出我的方法。

本文通过一个论坛上的SQL题目,展示如何处理类似行列转换的问题。题目涉及一个学生选课的表格,目标是统计每个学生选了语文、数学、英语科目的数量,以及选了所有课程的学生数量。解决方案利用了CTE(公共表表达式)进行数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论坛上的题目:

现在有表如下
学生姓名 选课科目
张三 语文
李四 英语
张三 数学
王五 政治
张三 体育
张三 美术
李四 语文
张三 英语

要求得如下结果
学生姓名              选了语文数学英语的科目数量               选了所有课程的科目数量
张三                                              3                                                              5
李四                                              2                                                              2
王五                                              0                                                              1

个人觉得,类似于行列转换的写法

;with ta(stu_name,stu_subject)  as

(
select 'Jim','Chinese'
union
select 'Tom','English'
union
select 'Jim','Math'
union 
select 'Anna','political'
union
select 'Jim','PE'
union 
select 'Jim','Art'
union 
select 'Tom','Chinese'
union
select 'Jim','English'
)
select stu_name,sum(case when stu_subject 
in('Chinese','English','Math') then 1 else 0 end ) as countofenglishchinesemath,
sum(case when stu_subject is not null then 1 else 0 end) as allsubjects 
from ta group by stu_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值