牛客每次考试完,都会有一个成绩表(grade),如下: id job score 1 C++ 11001 2 C++ 10000 3 C++ 9000 4 JAVA 12000 5 JAVA 13000 6 B 12000 7 B 11000 8 B 9999 第1行表示用户id为1的用户选择了C++岗位并且考了11001分 。。。 第8行表示用户id为8的用户选择了B语言岗位并且考了9999分 请你写一个sql语句查询各个岗位分数的中位数位置上的所有grade信息,并且按id升序排序,结果如下: id job score t_rank 2 C++ 10000 2 4 Java 12000 2 5 Java 13000 1 7 B 11000 2 解释: 第1行表示C++岗位的中位数位置上的为用户id为2,分数为10000,在C++岗位里面排名是第2 第2,3行表示Java岗位的中位数位置上的为用户id为4,5,分数为12000,13000,在Java岗位里面排名是第2,1 第4行表示B语言岗位的中位数位置上的为用户id为7,分数为11000,在前端岗位里面排名是第2 (注意: sqlite 12得到的不是0.5,得到的是0,只有1*1.02才会得到0.5,sqlite四舍五入的函数为round,sqlite不支持floor函数,支持cast(x as integer) 函数,不支持if函数,支持case when ...then ...else ..end函数,sqlite不支持自定义变量)
示例1
输入
drop table if exists grade;
CREATE TABLE grade(
`id` int(4) NOT NULL,
`job` varchar(32) NOT NULL,
`score` int(10) NOT NULL,
PRIMARY KEY (`id`));
INSERT INTO grade VALUES
(1,'C++',11001),
(2,'C++',10000),
(3,'C++',9000),
(4,'Java',12000),
(5,'Java',13000),
(6,'B',12000),
(7,'B',11000),
(8,'B',9999);
输出
2|C++|10000|2
4|Java|12000|2
5|Java|13000|1
7|B|11000|2
加载中...