mysql如何表示排名4~6名

mysql如何表示排名4~6名,第1张

按照并列且占位。

mysql按照并列且占位的规则来排名,例如96分应该是第四名,95分是第6名。

mysql排名并列即相同的值,相同的值保留重复名次,遇到下一个不同的值,跳跃到总共的排名。

工具/材料:Management Studio。

1、首先在桌面上,点击“Management Studio”图标。

2、之后在该界面中,点击左上角“新建查询”选项。

3、接着在该界面中,输入查询学生平均成绩及其名次的sql语句“select name,AVG(grade),no from test2 group by name,no”。

4、然后在该界面中,点击左上方“执行”按钮。

5、最后在该界面中,显示学生平均成绩及其名次成功。

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

表一(考试名称表):

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6146733.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存