mysql怎么查学生名次 mysql查询学生( 二 )


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 = '李四';
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.gradeb.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.gradeb.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;
如何用一条SQL语句查询某人所在名次,注意,是名次 。mysql1、首先新建一个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()方法将获得的数据资源转换为二维数组 。

推荐阅读