力扣 sql 题: 178. 分数排名的疑问?小数点后面多了一位

2020-09-08 23:55:48 +08:00
 amiwrong123
select t.score Score,t.rank 'Rank' from 
(
    select score, @r:=IF(@sc=score,@r,@r+1) as 'rank', @sc:=score
    from Scores, (select @r:=0, @sc:=NULL)init
    order by score desc
) t 

结果都是对的,为啥我这个小数点后面多了一位呢? 好像 rank 的数据类型也不对呢。。

1796 次点击
所在节点    程序员
7 条回复
amiwrong123
2020-09-09 00:05:50 +08:00
网址在这里,大佬们帮忙瞅瞅

https://leetcode-cn.com/problems/rank-scores/
justgodlike1993
2020-09-09 01:25:17 +08:00
用 CAST 转
amiwrong123
2020-09-09 08:40:39 +08:00
@justgodlike1993
两个字段都得转吗
walkerliu
2020-09-09 16:26:29 +08:00
select `Score`,CONVERT(SUBSTRING_INDEX(`Rank`,'-',-1),UNSIGNED INTEGER) as `Rank` from (
select score, case
when @preScore - score > 0.001 then @rank := @rank + 1
else @rank
end
as `rank` ,
@preScore := score from (select score from Scores order by score desc ) v,(select @rank := 1,@preScore := -1) r
) p
amiwrong123
2020-09-09 17:02:38 +08:00
@walkerliu
感觉里面不需要嵌套两个子查询吧,晚上我执行一下你的。

为啥我那个外层查询得到 rank 的字段看起来是个字符串的类型呢,奇怪,晚上看看
walkerliu
2020-09-09 17:13:06 +08:00
@amiwrong123 我的是英文版的网站,这个 SQL 是我 17 年的提交,现在翻出来已经 accept 不了了,改了一下才行(加了 ``)。 另外查询结果的 score 应该是对的不存在小数点的问题。Rank 需要强转一下成 int 类型。
amiwrong123
2020-09-09 17:23:55 +08:00
@walkerliu
好吧,我也觉得小数点应该不是问题,但为毛,那个自定义变量 @r 都是一个 int 型的,但从子查询的结果集再一查就变成了个字符串了。

这是个什么知识点。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/705346

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX