mysql怎么查学生名次 sql 查询学生名次

mysql中一张学生表,查询出单科成绩前十名学生的所有信息 和总分成绩前十名学生的所有信息 在线等

学生表名为:student, 单科成绩的字段为:subject。学生名字为:name

创新互联主营解放网站建设的网络公司,主营网站建设方案,app软件定制开发,解放h5微信小程序搭建,解放网站营销推广欢迎解放等地区企业咨询

查询单科成绩前十:mysql语句为:select * from student order by subject desc limit 10;

查询总分成绩前十:mysql语句为:select sum(subject) subject,name from student group by name order by subject desc limit 10;

注:

select sum(subject) subject,name

这句的意思是:sum(subject) subject 把单科成绩加总用subject 来命名(就是总成绩),name就是一个字段,这里只有两个字段。

group by name order by subject : group by name 的意思按照名字这一栏来分组,当然,学生成绩表名字有可能是一样的,按照学号是最准确的,这里只是举个例子。

order by subject  这句的意思是按照总分成绩排序,这里的subject 是前面重命名总分的意思。

select sum(subject) as countsubject,name from student group by name order by countsubject desc limit 10;

扩展资料:

学生成绩表常用sql

1. 在表中插入符合主键

[sql]

/*成绩表*/

CREATE TABLE SC

(

Sid INT REFERENCES Student(Sid), /*学生学号*/

Cid INT REFERENCES Course(Cid), /*课程编号*/

Score INT NOT NULL, /*课程分数*/

PRIMARY KEY(Sid,Cid) /*将学生学号和课程编号设为复合主键*/ 

)

2. 查询各科成绩最高分,最低分以及平均分

[sql]

SELECT c.Cname, MAX(s.Score) AS Max, MIN(s.Score) AS Min, AVG(s.Score) AS Average 

FROM Course c JOIN SC s ON c.Cid = s.Cid 

GROUP BY c.Cname 

/*此处应注意,若不按照c.Cname进行分组,SQL语句会报错,c.Cname在SELECT语句中不合法,因为它并未出现在聚合函数中也没有出现在GROUP BY语句中*/

3. 查询平均成绩大于80分的学生姓名以及平均成绩

[sql]

SELECT Sname, AVG(Score) AS Average FROM Student JOIN SC 

ON Student.Sid=SC.Sid 

GROUP BY Sname

HAVING AVG(Score)80 

/*以聚合函数为条件进行删选只能在HAVING语句中进行,WHERE语句不支持聚合函数*/

4. 按总分为学生排名,总分相同名次相同

[sql]

SELECT RANK() OVER (ORDER BY SUM(ss.Score) DESC) AS Rank, s.Sname,

ISNULL(SUM(ss.Score),0) 

FROM Student s LEFT JOIN SC ss 

ON s.Sid = ss.Sid 

GROUP BY s.Sname 

ORDER BY SUM(ss.Score) DESC

/*RANK()是SQL Server的一个built-in函数,语法为

RANK() OVER ( [ partition_by_clause ] order_by_clause ).*/

5. 查询总分在100至200之间的学生姓名及总分

[sql]

SELECT s.Sname,SUM(ss.Score) FROM Student s JOIN SC ss ON s.Sid=ss.Sid

GROUP BY s.Sname HAVING SUM(ss.Score) BETWEEN 100 AND 200

用sql语句,查询每个班级成绩排名前三名的学生姓名

1、首先在打开的SQL Server中,假设有两条数据中,包含有【张】,但是这个张一前一后,如下图所示。

2、此时就能利用Select和From语句,查询数据,如下图所示。

3、但是要查找姓名中包含有【张】,那么不能用等号,如下图所示。

4、因此一定要必须使用Like关键字,才能查询SQL的数据。

5、这个时候,如果单对【张】字后加个百分号是不允许的,这样只能查找姓张的数据。

6、如果想要前后都有关键字【张】,那么一定要在前后都加百分号,就能实现模糊查找姓名。

sql语言,有一个成绩单表,已知学生姓名,如何查询名次?

1、创建测试表,

create table test_score(name varchar2(20), score number);

2、插入测试数据

insert into test_score values('张三', 85);

insert into test_score values('李四', 90);

insert into test_score values('王二', 95);

insert into test_score values('吴七', 83);

insert into test_score values('李六', 66);

commit;

3、查询表中全量数据,select t.*, rowid from test_score t;

4、编写sql,根据学生姓名,查询学生名词,以学生‘李四’为例,成绩排名第二;  select t.* from (select t.*, rank() over(order by score desc) rk from test_score t) t where t.name = '李四';

如何用一条SQL语句查询某人所在名次,注意,是名次。 mysql

1、首先新建一个test数据库,在数据库里创建一张data数据表,在表内插入5条测试数据。

2、新建一个php文件,命名为test.php,用于讲解使用sql查询数据表前三天的数据。

3、在test.php文件内,使用header()方法设置文件执行的编码为utf8,避免输出中文时产生乱码。

4、在test.php文件内,使用数据库账号、密码、名称,利用mysqli创建数据库连接,并使用set_charset()方法设置获得数据的编码为utf8,同时,使用if语句判断连接数据库是否成功,如果连接不成功,输出错误信息。

5、在test.php文件内,编写sql语句,使用TO_DAYS()分别获得当前的天数和数据表ctime字段数据的天数,两者之差小于3天,即前三天,以此为条件查询data数据表的数据,使用query()执行sql语句,同时使用fetch_all()方法将获得的数据资源转换为二维数组。

6、在test.php文件内,使用foreach方法遍历上一步获得的二维数组,输出数据的id和姓名。

7、最后在浏览器运行test.php文件,查看程序执行的结果,可见,成功从数据库获得前三天的数据。

mysql查询如何实现每个人每科成绩的排名

MYSQL 如果强行实现,查询逻辑会变的很复杂,不符合实际

计算最好是在PHP里面

$data ..//比如查询结果返回给DATA 的二维数组

foreach($data as $vo){

$math[$vo['name']] = $vo['数学'];

$langue[$vo['name']] = $vo['语文'];

$englist[$vo['name']] = $vo['英语'];

}

arsort($math);

arsort($langue);

arsort($englist);

$i = 1;

foreach($math as $key=$vo){

$res[$key]['数学'] =  $i;

}

$i = 1;

foreach($langue as $key=$vo){

$res[$key]['语文'] =  $i;

}

$i = 1;

foreach($englistas $key=$vo){

$res[$key]['英语'] =  $i;

}

mysql查询我在各科考试中的名次

借题主答复另一个问题的答案:

表一(考试名称表):

CREATE TABLE `zm_exam` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id,考试表',

`title` varchar(120) NOT NULL DEFAULT '' COMMENT '考试名称',

`t_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '外键,老师表',

`cg_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '外键,班级表',

`exam_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '考试时间',

`status` tinyint(2) unsigned NOT NULL DEFAULT '1' COMMENT '1正常,2禁用',

`type` tinyint(2) unsigned NOT NULL DEFAULT '1' COMMENT '考试类别,1单科,2全部',

`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '考试说明',

`createdtime` datetime DEFAULT '0000-00-00 00:00:00',

`changedtime` datetime DEFAULT '0000-00-00 00:00:00',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

表二(考试科目记录表):

CREATE TABLE `zm_score` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id,成绩表',

`e_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '外键,考试表',

`c_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '外键,科目表',

`stu_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '外键,学生表',

`grade` float unsigned NOT NULL DEFAULT '0' COMMENT '成绩分数',

`status` tinyint(2) unsigned NOT NULL DEFAULT '1' COMMENT '1正常,2禁用',

`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '说明',

`createdtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`changedtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8

问题:查出每次考试中,该学生在此次考试中的分数排名:

-- a表、b表同为一模一样的临时表

-- 通过比对a、b两表的考试记录id考试分数个数( WHERE a.id = b.id AND a.grade  b.grade)

SELECT *,

(SELECT COUNT(*)+1 FROM 

(SELECT e.`id`,e.`title`,e.`remark`,s.`grade`,s.`stu_id`,e.`exam_time` FROM zm_student stu,zm_exam e,zm_score s 

WHERE stu.`id` = 132 AND stu.`status` = 1 AND stu.`c_g_id` = e.`cg_id` AND e.`type` = 1 AND e.`id` = s.`e_id` AND s.`status` = 1 ORDER BY s.`grade` DESC) AS b WHERE a.id = b.id AND a.grade  b.grade) AS paiming -- 名次

FROM 

(SELECT e.`id`,e.`title`,e.`remark`,s.`grade`,s.`stu_id`,e.`exam_time` FROM zm_student stu,zm_exam e,zm_score s 

WHERE stu.`id` = 132 AND stu.`status` = 1 AND stu.`c_g_id` = e.`cg_id` AND e.`type` = 1 AND e.`id` = s.`e_id` AND s.`status` = 1 ORDER BY s.`grade` DESC) AS a WHERE a.stu_id = 132 ORDER BY id DESC;


当前名称:mysql怎么查学生名次 sql 查询学生名次
分享链接:http://cdiso.cn/article/hpescp.html

其他资讯