sql - 选择子句中的 SQL Server case 语句
问题描述
我有一个查询,它给了我 StudentId 和 PercentageScored 在学生参加的考试中,一个学生可以参加多个考试
StudentId | PercentageScored
101 82
102 57
101 69
103 71
103 42
下面是一个示例查询,我的实际查询类似于下面。
Select s.StudentId, m.[PercentageScored]
FROM dbo.[Student] S
Inner join dbo.[Marks] m
ON S.[StudentId] = m.[StudentId]
WHERE S.[StudentGroup] = 12 AND S.[Active] = 1
现在我需要添加一些逻辑,以便我的输出如下所示
StudentId | FirstClass | SecondClass | ThirdClass
101
102
103
104
如果学生的百分比得分高于 80% 然后是一等,百分比得分在 60 到 80 % 之间然后是二等,百分比得分低于 60% 然后是三等.. 我需要给出计数,对于一个给定的学生,他有多少次得分超过 80 %,60-80%之间多少次,60%以下多少次
解决方案
使用条件聚合:
SELECT
s.StudentId,
COUNT(CASE WHEN m.[PercentageScored] > 80 THEN 1 END) AS FirstClass,
COUNT(CASE WHEN m.[PercentageScored] > 60 AND
m.[PercentageScored] <= 80 THEN 1 END) AS SecondClass,
COUNT(CASE WHEN m.[PercentageScored] <= 60 THEN 1 END) AS ThirdClass
FROM dbo.[Student] s
INNER JOIN dbo.[Marks] m
ON s.[StudentId] = m.[StudentId]
WHERE
s.[StudentGroup] = 12 AND s.[Active] = 1
GROUP BY
s.StudentId;
推荐阅读
- java - CertPath 中的证书顺序
- xslt - 在 XSLT 中,如何将 16 年、10 个月、4 天转换为年(作为整数/小数)以显示员工的服务期?
- c - 自动分配给指针数组的值
- java - (使用 Eclipse)未解决的编译错误:GradeBook 无法解析为类型
- ignite - 点燃:将持久性配置到自定义目录
- ios - 如何使用 NSTextStorage 获取最大行数的字符串高度?
- c# - EF - 使用带有 where 子句的控制器的 Id 参数加入查询
- html - 图标在选项元素内未正确显示
- java - 我删除了适配器中的一些项目,并且在我的 setOnClick 崩溃之后
- lua - 如何让 LUA 在 VSCode 中工作,使其运行到输出窗口?