在sql中根据成绩显示学生排名

1、准备

 1 create table newtable
 2 (
 3   name VARCHAR(100),
 4   yuwen INT(10),
 5   shuxue INT(10)
 6 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 7
 8
 9 INSERT INTO newtable (name, yuwen, shuxue) VALUES (‘张三‘, 80, 67);
10 INSERT INTO newtable (name, yuwen, shuxue) VALUES (‘李四‘, 98, 65);
11 INSERT INTO newtable (name, yuwen, shuxue) VALUES (‘王五‘, 59, 98);
12 INSERT INTO newtable (name, yuwen, shuxue) VALUES (‘赵六‘, 76, 87);
13 INSERT INTO newtable (name, yuwen, shuxue) VALUES (‘田七‘, 69, 85);

2、实现

 1 select yuwentable.name studentname,yuwentable.yuwen yuwenscore ,cast(yuwentable.rank as SIGNED) yuwenrank,shuxuetable.shuxue shuxuescore,cast(shuxuetable.rank as SIGNED) shuxuescore
 2 from
 3   (
 4     select (@yuwenrank:=@yuwenrank+1) as rank,name,yuwen
 5     from newtable a,(select (@yuwenrank:=0)) b order by a.yuwen desc
 6   ) yuwentable ,
 7   (
 8     select (@shuxuerank:=@shuxuerank+1) as rank,name,shuxue
 9     from newtable a,(select (@shuxuerank:=0)) b order by a.shuxue desc
10   ) shuxuetable
11   where yuwentable.name = shuxuetable.name order by yuwentable.name

说明:在DbVisualizer中,代码执行后,RANK这列含有小数点,所以这里通过case函数将其转换整数

3、结果

studentname yuwenscore yuwenrank shuxuescore shuxuescore
----------- ---------- --------- ----------- -----------
张三          80         2         67          4
李四          98         1         65          5
王五          59         5         98          1
田七          69         4         85          3
赵六          76         3         87          2   

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。

如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。

如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【刘超★ljc】。

本文版权归作者,禁止转载,否则保留追究法律责任的权利。

时间: 2024-10-11 05:16:43

在sql中根据成绩显示学生排名的相关文章

【SQL Server】利用游标将学生表中的成绩转化为绩点

软件工程综合实践第一次作业 代码来源:班上同学的数据库大作业 alter table sc add GPA float; --加入绩点列 alter table sc add number int identity(1,1);--将表按原始位置顺序编号(可加可不加) alter table sc add primary key(number) declare score_visit cursor --声明一个游标 for select score from sc open score_visit

SQL常见面试题(学生表_课程表_成绩表_教师表)

表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 建表语句 CREATE TABLE student ( s# INT, sname nvarchar(32), sage INT, ssex nvarchar(8) ) CREATE TABLE course ( c# INT, cname nvarchar(32), t# INT ) CREA

编程题:功能:将5个学生记录输入文件d:\stu1.txt中,并且显示在屏幕上。

编程题:文件读写fprintf().fscanf()使用,功能:将5个学生记录输入文件d:\stu1.txt中,并且显示在屏幕上. #include<stdio.h> void main() { FILE *fp;long num;int n,score;char name[20]; int N=5; fp=fopen("d:\\s tu1.txt","w"); for(n=1;n<=N;n++) { scanf("%s%10ld%d&q

将SQL中的Date型字段显示为&quot;yyyy-MM-dd&quot;格式

SQL中的Date型字段在GridView控件中默认显示为yyyy/mm/dd 0:00:00格式,不符合中文习惯.为了使其显示为"yyyy-MM-dd"格式,需要做以下设置:? 1.打开GridView任务栏? 2.设置Date型字段的DataFormatString为{0:yyyy-MM-DD}?

计算student_grade.txt 中 语文成绩的平均值, 找出数学成绩最高的学生是谁

题目要求: 计算student_grade.txt 中 语文成绩的平均值, 找出数学成绩最高的学生是谁 方法一: with open('student_grade.txt', 'r', encoding='utf-8') as f: data = f.read() #读取student_grade.txt的内容给data(文本) data_lines=data.splitlines() #把文本转换成列表,同时去掉换行 empty={} #定义一个空字典 for i in data_lines:

ORACLE 在 SQLPLUS 与 PL/SQL 中显示乱码的问题

Linux下SQLPlus中文乱码处理的方法 1.首先查询数据库字符集 SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.AL32UTF8 SQL> exit 从上面得知数据库字符集为 AMERICAN_AMERICA.AL32UTF8 2.配置环境变量 echo 'export

Sql中Rank排名函数

A.对分区中的行进行排名 以下示例按照数量对指定清单位置的清单中的产品进行了排名. 结果集按 LocationID 分区并在逻辑上按 Quantity 排序. 注意,产品 494 和 495 具有相同的数量. 因为它们是关联的,所以两者均排名第一. USE AdventureWorks2012; GO SELECT i.ProductID, p.Name, i.LocationID, i.Quantity ,RANK() OVER (PARTITION BY i.LocationID ORDER

sql中的 where 、group by 和 having 用法解析(摘抄)

文章地址来源: https://www.cnblogs.com/gqs92/archive/2017/04/26/6767973.html --sql中的 where .group by 和 having 用法解析 --如果要用到group by 一般用到的就是"每这个字" 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术 select DepartmentID as '部门名称',COUNT(*) as '个数' from BasicDepartment group

SQL 中的 EXISTS 到底做了什么?

本文中提到的所有数据表基于王珊<数据库系统概论(第4版)>. 个人认为 SQL 中的 EXISTS 关键字对于初学者来说是比较难理解的一个,尤其是多个 EXISTS 子句的嵌套.我就写篇小文章,来简单地来解释下 EXISTS 到底做了些什么. 我们先从 SQL 中最基础的 WHERE 子句开始. 比如下面这条 SQL 语句: 很显然,在执行这条 SQL 语句的时候,DBMS 会扫描 Student 表中的每一条记录,然后把符合 Sdept = 'IS' 这个条件的所有记录筛选出来,并放到结果集