sql 如何查询每个班级中的最高分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 如何查询每个班级中的最高分相关的知识,希望对你有一定的参考价值。
三张表
学生表:姓名,学号,班级号
成绩表:学号,成绩
班级表:班级号,班级名称
现在需要查询每个班级中的最高分
请问该怎么写?
比如说如果有三个班级,那应该是3条记录.
不是查询一个班级的最好分!
班级中的最高分也就意味着得到的记录中就班级名称和分数!
具体代码如下:
select 班级名称,分数=MAX(成绩)
from
学生表 s join 班级表 c
on s.班级号=c.班级号
join 成绩表 sc
on s.学号=sc.学号
group by 班级名称
扩展资料:
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。
不同的 SQL JOIN,您可以使用的不同的 SQL JOIN 类型:
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行
参考资料:
Oracle官方API接口-PL/SQL API
W3cSchool-SQL JOIN
参考技术Aselect
bbb.班级名称,
aaa.最高分
from
(
select
班级号,
max(成绩) as 最高分
(
select
班级号,
成绩
from 成绩表 a
left join 学生表 b
on a.学号=b.学号
)aa
group by 班级号
)
aaa left join 班级表 bbb on aaa.班级号=bbb.班级号
create table T(学号 varchar(10),班级 varchar(10),总分 int)
insert into T(学号,班级,总分)
select 'x_001','A',40 union all
select 'x_002','B',60 union all
select 'x_003','C',90 union all
select 'x_004','A',10 union all
select 'x_005','A',20 union all
select 'x_006','A',30 union all
select 'x_007','B',40 union all
select 'x_008','B',90 union all
select 'x_009','B',100 union all
select 'x_010','C',32 union all
select 'x_011','C',54 union all
select 'x_012','C',73 union all
select 'x_013','C',23
扩展材料:
1.一体化:SQL集数据定义DDL、数据操纵DML和数据控制DCL于一体,可以完成数据库中的全部工作。
2.使用方式灵活:它具有两种使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主语言中使用。
3.非过程化:只提操作要求,不必描述操作步骤,也不需要导航。使用时只需要告诉计算机“做什么”,而不需要告诉它“怎么做”。
4.语言简洁,语法简单,好学好用:在ANSI标准中,只包含了94个英文单词,核心功能只用6个动词,语法接近英语口语。
参考资料来源:百度百科——sql
参考技术B 可以通过班级进行分组,分组函数“group by ”,可以通过max函数获取到某列的最大值。sql:select class ,max(score) from tablename group by class;
解释:上面语句的意思就是说通过班级分组后,查询出所有的班级和班级中的最高分 参考技术C select
bbb.班级名称,
aaa.最高分
from
(
select
班级号,
max(成绩) as 最高分
(
select
班级号,
成绩
from 成绩表 a
left join 学生表 b
on a.学号=b.学号
)aa
group by 班级号
)aaa left join 班级表 bbb on aaa.班级号=bbb.班级号本回答被提问者采纳
用sql语句,查询每个班级成绩排名前三名的学生姓名
1、首先在打开的SQL Server中,假设有两条数据中,包含有【张】,但是这个张一前一后,如下图所示。
2、此时就能利用Select和From语句,查询数据,如下图所示。
3、但是要查找姓名中包含有【张】,那么不能用等号,如下图所示。
4、因此一定要必须使用Like关键字,才能查询SQL的数据。
5、这个时候,如果单对【张】字后加个百分号是不允许的,这样只能查找姓张的数据。
6、如果想要前后都有关键字【张】,那么一定要在前后都加百分号,就能实现模糊查找姓名。
参考技术A 你的数据结构是怎么样的呢?是否已经计算了总分
假设已经计算了总分
前三名所有记录 列可以自定义 (列出前3名成绩总分 3种主流数据库写法)
sqlserver数据库:
select top 3 from 成绩表 order by 总分 desc
mysql数据库:
select * from 成绩表 order by desc 总分 desc limit 3
oracle数据库:
select * from 成绩表 order by desc 总分 ROWNUM <= 3
如果说没有给出总分
需要先计算总分
select (语文+数学+。。。)as total top 3 from 成绩表 order by total desc
然后其他数据库自己灵活运用你自己所使用的数据库的上述方法追问
在Oracle中,本题是先把班级分组还是先按成绩排序
追答先分组分组 然后再排序
参考技术B select top 3 * from 成绩 group by 班级 order by 成绩 参考技术C 思路是先分组后按成绩排序以上是关于sql 如何查询每个班级中的最高分的主要内容,如果未能解决你的问题,请参考以下文章