问题
drop table if exists passing_number;
CREATE TABLE `passing_number` (
`id` int(4) NOT NULL,
`number` int(4) NOT NULL,
PRIMARY KEY (`id`));
INSERT INTO passing_number VALUES
(1,4),
(2,3),
(3,3),
(4,2),
(6,4),
(5,5);
请你根据上表,输出通过的题目的排名,通过题目个数相同的,排名相同,此时按照id升序排列,数据如下:
id为5的用户通过了5个排名第1,
id为1和id为6的都通过了4个,并列第2
sql
SELECT
a.*,
CONVERT ( r.t_rank, UNSIGNED ) t_rank
FROM
( SELECT pn.* FROM passing_number pn ORDER BY pn.number DESC, id ) a
LEFT JOIN (
SELECT
p.number,
@r := @r + 1 t_rank
FROM
( SELECT DISTINCT number FROM passing_number ) p,
( SELECT @r := 0.0 ) q
ORDER BY
number DESC
) r ON a.number = r.number
总结
@r 变量在navcat 返回看到结果就是整数,在牛客提交会有小数点加3个0,百思不得解。
最后使用 CONVERT 转为整形 。或许sql中定义的变量是浮点型的?
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!