/*-----------实现对科目分组下显示最大的成绩算法---------------*/

本文介绍了一种使用SQL查询来实现对学生不同科目的最高分进行分组的方法。通过三种不同的SQL查询语句实现目标:一是利用子查询结合分组;二是使用子查询简化语法;三是采用SMART算法确保结果准确性的同时讨论了性能问题。
/*-----------实现对科目分组下显示最大的成绩算法---------------*/
create table liangfei2(学号 varchar(10),姓名 varchar(10),科目 varchar(10), 成绩 int)----建表
insert liangfei2
select '1','张三','语文','80' union all
select '2','李四','语文','83' union all
select '3','王五','英语','99' union all
select '4','李四','数学','88' union all
select '5','张三','英语','66' union all
select '6','王五','数学','87' union all
select '7','李四','英语','69' union all
select '8','张三','数学','63' union all
select '9','王五','语文','77' 
go
select liangfei2.*
from (select max(成绩) as mt,科目----------------加入分组列,分组列对应的信息列(我本写的学号,对于GROUP BY ,在SELECT中不能用非分组列)
      from liangfei2 
      
group by 科目) as b,liangfei2
where liangfei2.科目=b.科目 and b.mt=liangfei2.成绩
go
select * 
from liangfei2 
where (科目,成绩) in
            (
select 科目,max(成绩)as mt from liangfei2 group by 科目)
go
select * 
from liangfei2 
where  in-----------------
            (select max(成绩) from liangfei2 group by 科目)
go
select * ---------------SMART的算法,但性能不行
from liangfei2 a 
where not exists
               (
select 1 from liangfei2 where 科目=a.科目 and 成绩>a.成绩)



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值