表结构:
create table scores (studentId int primary key,subject varchar(10),mark number(3,1));
描述:这是一张学生成绩表,字段分别为学生id,科目,成绩.
假如有如下数据
studentId subject mark
1 A 87.0
2 A 89.0
3 B 89.0
4 A 78.9
5 A 88.9
6 B 78.9
7 B 98.9
8 C 86.9
9 C 96.9
10 C 78.5
要求每门科目的平均成绩以及该门科目的优秀率,优秀率为每门科目中成绩高于85的人数占该科目总人数的比例。
想了一阵用group 分组似乎写不出来。问题在于分组后,要计算该组中成绩超过85的人数,不知道该怎么实现这一点。
后来在cnoug上网友帮我解决了,在这里记录下来。
主要用到了case when 条件控制.
select round(avg(mark),2) avg_mark,
round(count(case
when mark >= 85 then
1
end) / count(*) * 100,2) p
from scores
group by subject
其中round(m,n)函数为四舍五入函数,n为小数点后要保留的位数。
分享到:
相关推荐
在 SQL 查询语言中,`CASE WHEN` 结构是一种非常有用的工具,可以用来根据条件返回不同的值。它的工作原理类似于编程语言中的 `if...else` 语句,但在 SQL 中用于创建动态列或进行复杂的条件判断。 #### 基本语法 ...
SQL 中 Case 用法 Case 语句是 SQL 中一种强大的语句,用于根据不同的条件执行不同的操作。它可以用来实现复杂的逻辑操作,并且可以与其他 SQL 语句结合使用以实现更加复杂的查询。 SQL 中 Case 语句有两种格式:...
在SQL语言中,可以使用Update表名Set字段名=case字段名when值1then值2else值三endFrom表名Where条件语句来实现条件语句的写法。 四、取余函数Mod() 在PB脚本中,可以使用Mod(要取余数的值,取余值)函数来实现取余数...
SQL中Case的使用方法 Case具有两种格式。简单Case函数和Case搜索函数。 代码如下:–简单Case函数 CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数 CASE WHEN sex = ...
标题《Case_When用法》为我们提供了一个深入学习SQL中Case表达式使用方法的契机。在SQL中,Case表达式是一个条件分支结构,允许在查询中进行条件判断,并基于条件返回不同的结果。该表达式分为两种格式:简单Case...
`CASE...WHEN` 和 `PIVOT` 都能实现SQL中的行列转换,但适用情况和写法有所不同。`CASE...WHEN` 更灵活,适用于简单的转换,而 `PIVOT` 更直观且方便处理复杂转换,特别是涉及多个值到多列的转换。在选择使用哪种...
代码如下: –简单Case函数 CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数 CASE WHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘2’ THEN ‘女’ ELSE ‘其他’ END 这两种...
这里通过 `CASE` 语句实现了一个简单的 `WHEN-THEN` 分支结构,根据 `@today` 的值返回对应的星期名称。 以上内容主要介绍了 SQL Server 中存储过程中的一些基本语法和操作方法,包括变量定义及赋值、表和临时表的...
–简单Case函数CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ELSE ‘其他’ END–Case搜索函数CASE WHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘2’ THEN ‘女’ELSE ‘其他’ END 这两种方式,可以...
`CASE...WHEN` 更通用,不受数据库版本限制,但写法较为复杂;而 `PIVOT` 函数则更为直观简洁,但只适用于支持它的数据库系统,如SQL Server。在实际应用中,应根据数据结构、需求和数据库特性选择合适的方法。
为了解决这个问题,我们可以调整`CASE WHEN`的写法,利用`IN`关键字来检查值是否在给定的列表中,如下所示: ```sql SELECT CASE WHEN substr(id_card_no, 17, 1) IN (1, 3, 5, 7, 9) THEN '男' WHEN substr(id_...
DB2中可以使用CASE函数来实现复杂的逻辑判断,例如set prodname = (case when (name is not null) then name when (namestr is not null) then namestr else defaultname end);该语句可以实现对prodname变量的赋值,...
本文将介绍10个高级SQL写法,这些技巧主要源自MySQL 8.0环境,适用于处理各种业务需求。 1. **ORDER BY FIELD() 自定义排序** 在MySQL中,除了常见的`ASC`和`DESC`用于排序外,`ORDER BY FIELD()`函数允许我们...
在MySQL中,`CASE WHEN` 是一个非常强大的表达式,常用于进行复杂的条件判断和排序。这个表达式允许我们在SQL查询中根据不同的条件执行不同的操作,例如改变字段的值或控制排序顺序。在本篇文章中,我们将深入探讨...
- **CASE表达式**是一种根据不同条件返回不同结果的表达式,在构建动态SQL时可以提供更简洁的写法。 - **示例**: ```sql SELECT * FROM table WHERE addDate = CASE WHEN @addDate IS NULL THEN addDate ELSE...
12.1.1 Case When改造 334 12.1.2 Rownum分页改写 337 12.1.3 Hint直接路径改造 338 12.1.4 只取你所需的列 339 12.1.5 避免或者减少递归调用 341 12.1.6 ROWID优化应用 347 12.2 设法避免外因影响 350 ...
2. **数据清洗**:对于需要根据特定规则对数据进行清洗的应用场景,可能会使用到包含多个CASE WHEN语句的复杂SQL语句。 3. **报表生成**:生成复杂的报表时,往往需要从多个表中抽取数据并进行复杂的联接操作,从而...
CASE...END 语句在SQL Server中提供了类似C#中的switch-case逻辑,允许根据不同的条件返回不同的值。例如,在用户等级分类中,可以根据level字段的值赋予不同的头衔: ```sql SELECT name, CASE level WHEN 1 ...
在Oracle中使用`CASE`语句的方式与SQLServer类似,但需要注意Oracle中`CASE`语句的写法有所不同。例如: ```sql SELECT StuNo AS '学号', MAX(CASE WHEN Subject = '语文' THEN Score ELSE 0 END) AS '语文', ...