MySQL update statement to store ranking positions

后端 未结 5 2121
死守一世寂寞
死守一世寂寞 2020-12-05 03:41

I\'m trying to get my head around a query and I just can\'t figure it out. I would appreciate if someone give me a pointer. As a simple example of what I\'m trying to achiev

5条回答
  •  悲&欢浪女
    2020-12-05 04:15

    i'm showing you my way of doing it [for interval sql update functions]

    select:

    set @currentRank = 0,
        @lastRating = null,
        @rowNumber = 1;
    select
        *,
        @currentRank := if(@lastRating = `score`, @currentRank, @rowNumber) `rank`,
        @rowNumber := @rowNumber + if(@lastRating = `score`, 0, 1) `rowNumber`,
        @lastRating := `score`
    from `table`
    order by `score` desc
    

    update:

    set @currentRank = 0,
        @lastRating = null,
        @rowNumber = 1;
    update 
        `table` r
        inner join (
            select
                `primaryID`,
                @currentRank := if(@lastRating = `score`, @currentRank, @rowNumber) `rank`,
                @rowNumber := @rowNumber + if(@lastRating = `score`, 0, 1) `rowNumber`,
                @lastRating := `score`
            from `table`
            order by `score` desc
        ) var on
            var.`primaryID` = r.`primaryID`
    set
        r.`rank` = var.`rank`
    

    i did not make any performance checks on this one except for testing that it works

提交回复
热议问题