V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
牛客网
amiwrong123
V2EX  ›  程序员

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

  •  
  •   amiwrong123 · 52 天前 · 1039 次点击
    这是一个创建于 52 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 
    
    1599580147(1)

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

    7 条回复    2020-09-09 17:23:55 +08:00
    amiwrong123
        1
    amiwrong123   52 天前
    网址在这里,大佬们帮忙瞅瞅

    https://leetcode-cn.com/problems/rank-scores/
    justgodlike1993
        2
    justgodlike1993   51 天前
    用 CAST 转
    amiwrong123
        3
    amiwrong123   51 天前 via Android
    @justgodlike1993
    两个字段都得转吗
    walkerliu
        4
    walkerliu   51 天前
    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
        5
    amiwrong123   51 天前
    @walkerliu
    感觉里面不需要嵌套两个子查询吧,晚上我执行一下你的。

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

    这是个什么知识点。。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2311 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:12 · PVG 00:12 · LAX 09:12 · JFK 12:12
    ♥ Do have faith in what you're doing.