表: 成绩表 +------+-----+ 字段名称 类型 +------+-----+ 学号 int 班级 int 成绩 int +------+-----+ 学号 是该表的主键。 该表的每一行表示 一个班级中一个学生的成绩,包含学号、班级和成绩。 编写一个 SQL 查询,得出每个班级学生成绩的百分比排名,排名保留2位小数。 查询结果如下例所示。 示例 1: 输入: 表:成绩表 +------+----+----+ 学号 班级 成绩 +------+----+----+ 1001 1 86 1002 1 95 1003 2 89 1004 1 83 1005 2 86 1006 3 92 1007 3 86 1008 1 88 +------+----+----+ 输出: +------+----+----+-------+ 学号 班级 成绩 百分位排名 +------+----+----+-------+ 1002 1 95 0 1008 1 88 0.33 1001 1 86 0.67 1004 1 83 1 1003 2 89 0 1005 2 86 1 1006 3 92 0 1007 3 86 1 +------+----+----+-------+ 解释: 使用窗口函数percent_rank()获取百分位排名,获取后使用round()函数保留2位小数。
示例1

输入

CREATE TABLE `成绩表` 
(
    `学号` INT,
    `班级` INT,
    `成绩` INT
);
-- 插入第一组数据
INSERT INTO `成绩表` (`学号`, `班级`, `成绩`) VALUES (1001, 1, 86);
INSERT INTO `成绩表` (`学号`, `班级`, `成绩`) VALUES (1002, 1, 95);
INSERT INTO `成绩表` (`学号`, `班级`, `成绩`) VALUES (1003, 2, 89);
INSERT INTO `成绩表` (`学号`, `班级`, `成绩`) VALUES (1004, 1, 83);
INSERT INTO `成绩表` (`学号`, `班级`, `成绩`) VALUES (1005, 2, 86);
INSERT INTO `成绩表` (`学号`, `班级`, `成绩`) VALUES (1006, 3, 92);
INSERT INTO `成绩表` (`学号`, `班级`, `成绩`) VALUES (1007, 3, 86);
INSERT INTO `成绩表` (`学号`, `班级`, `成绩`) VALUES (1008, 1, 88);

输出

学号|班级|成绩|百分位排名
1002|1|95|0.0
1008|1|88|0.33
1001|1|86|0.67
1004|1|83|1.0
1003|2|89|0.0
1005|2|86|1.0
1006|3|92|0.0
1007|3|86|1.0
加载中...