SQL之学生名次问题

--对输入的数据进行约束
create table t(studentID char(10), [name] varchar(8),
startDate char(10) Check (isdate(startdate)=1 and cast(startdate as datetime)=convert(datetime,startdate,120)))
insert into t
select ‘aa‘,‘bb‘,‘77799820‘
union all select ‘bb‘,‘ggg‘,‘2007-10-11‘
union all select ‘cc‘,‘ddd‘,‘2007-20-11‘
select * from t
--创建测试表
create table tbl ([name] varchar(8), chinese float, math float,zong float,px int)
insert tbl
select ‘a‘, 80, 90,null,null
union all select ‘b‘, 85, 88,null,null
union all select ‘c‘, 77, 93,null,null
union all select ‘d‘, 80, 90,null,null
union all select ‘e‘, 99, 100,null,null
--另一种方法
select *,zong=chinese + math,
px=(select count(1)+1 from tbl b where b.chinese + b.math >a.chinese + a.math )
from tbl a order by px,chinese

--创建存储过程
create proc mysql
as
update bb set zong=tt.zong,px=tt.px from tbl bb,
(SELECT name,zong , px=(SELECT COUNT(zong) FROM
(
select name,chinese,math,zong = chinese + math from tbl
) t
WHERE zong > a.zong or (zong = a.zong and chinese > a.chinese)) + 1
FROM
(
select name,chinese,math,zong = chinese + math from tbl
) a
) tt
where bb.name=tt.name
go
--调用存储过程
exec mysql
--查看
select * from tbl

--删除
drop table tbl
drop proc mysql

--创建表
create table tb(ID int,TEAM varchar(10),SCORE int,SCORE2 int,SCORE3 int)
insert into tb values(1, ‘A ‘, 100 , 100 , 100)
insert into tb values(2, ‘A ‘, 90 , 100 , 100)
insert into tb values(3, ‘B ‘, 50 , 40 , 30 )
insert into tb values(4, ‘B ‘, 50 , 40 , 30)
insert into tb values(5, ‘A ‘, 90 , 100 , 80)
insert into tb values(6, ‘B ‘, 55 , 50 , 50)
insert into tb values(7, ‘A ‘, 90 , 100 , 50)

--查询
select *,px=(select count(1)+1 from tb
where team=a.team and (score >a.score)
or (score = a.score and score2 >a.score2)
or (score = a.score and score2=a.score2 and score3 >a.score3)
or (score = a.score and score2=a.score2 and score3=a.score3 and id <a.id))
from tb a order by team

--删除
drop table tb

时间: 2024-10-10 13:26:14

SQL之学生名次问题的相关文章

SQL 查询学生缺考情况

有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录,写一段SQL语句,检索出每个学生缺考的科目.A 学生表(student)字段1 学生号(s_id)字段2 学生名(s_name) B 科目表(course)字段1 科目号(c_id)字段2 科目名(c_name) C 成绩表(grade)字段1 成绩号(g_id)字段2 学生号(s_id)字段3 科目号(c_id)字段4 成绩(score) 注意:如果学生缺考,在成绩表中就没有记录,而不是score为空 select s

基于C#.net,sql server学生成绩管理系统---Shinepans

未完待续,代码稍后上传.............2014-9-5

排名次SQL语句【名次可重复时】

原文发布时间为:2008-10-26 -- 来源于本人的百度文章 [由搬家工具导入] 功能实现 名次可重复时,比如第一名有两个。。。 select   *,(select   count(distinct score) from   paper a where   a.score >= b.score ) mingci from   paper b order by score desc 如: 2   3    90   1 3    4   90   1 1   5    80   2 4  

sql从学生成绩表中查出各科成绩分布最多的记录

题目:有一个数据表student,包含name(姓名),dept(科目),score(成绩)三个字段,现在要求查出每科成绩分数分布最多的项,如语文成绩80分最多,就输出语文80分的人数,数学90分的人最多,输出数学90分的人数: 测试数据: insert into student values ("deng","80","语文"); insert into student values ("zhang","80&qu

ibatis之——学生信息管理实例

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47107647 iBatis 简介: iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快.如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,现在的iBatis 已经改名为Mybatis 了. 官网为:http://www.mybatis.org/ 搭建iBatis 开发

面试题 | 数据库笔试题集合&#183;之&#183;SQL语句(2)

第2章 SQL 语句 2.1 选择2.1.1 DELETE FROM S WHERE 年龄>60 语句的功能是( A ) A.从 S 表中彻底删除年龄大于 60 岁的记录B.S 表中年龄大于 60 岁的记录被加上删除标记C.删除 S 表D.删除 S 表的年龄列 2.1.2 使用什么命令可以清除表中所有的内容? ( CD ) A.INSERT  B.UPDATE C.DELETE D.TRUNCATE 2.1.3 以下哪个表不用于 mysql 的权限管理( D ) A.HOST         

JAVA笔试面试题目集锦

来自棱镜学院-在线IT教育www.prismcollege.com 1.数据库,比如100用户同时来访,要采取什么技术解决:(JDBC) 答:可采用连接池.控制数据库的连接数量 2.String,  StringBuffer StringBuilder的区别.(Core Java) 答:String是一组不可变的unicode编码的字符序列: StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String

初识Oracle数据库的基本操作

SQL> --切换用户 SQL> connect practice/123 已连接. SQL> --查询学生表信息 SQL> select * from stuInfo; STUNO STUNAME STUAGE STUID STUSEAAT ------ -------------------- ---------- ---------- ---------- 0 王五 15 5.9876E+15 5 2 王五 15 5.9876E+15 5 3 王五 15 5.9876E+15

润乾集算报表多样性数据源之多结果集

多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表除了支持不同类型的数据源(RDB.TXT文本.Excel.JSON.HTTP.Hadoop.mongodb)外,还支持在一个数据集中为报表返回多个结果集使用,这样可以有效避免重复运算,提升报表开发效率和运算性能.下面通过一个实例说明多结果集的使用过程. 报表说明 根据学生成绩表查询总成绩前三名和后三名的学生姓名以及总成绩.报表样式如下: 由于要分别显示前三名和后三名学生姓名和成绩,报