mysql如何進行統計求和並計算出名次

對錶中人員的score進行求和然後計算出名次字段

對應的mysql語句爲:

 select personID, totalScore,personName,
        if(@de > totalScore, @rank:=@rank+@num+1, @rank) rank,
        if(@de = totalScore, @num:=@num, @num:=0),
        @de:=totalScore  from(
        select @de:=0, @rank:=1, @num:=0,personName,personID,sum(score) totalScore
        from  person
        group by personID,personName order by totalScore desc) tmp
執行之後計算出的結果爲:


rank爲統計排名的名次。

名次有的需求或許不是需要 1 2 2 3形式的排名,而是需要 1  2 2 4

那麼只需要把sql語句改爲

 select personID, totalScore,personName,
        if(@de > totalScore, @rank:=@rank+@num+1, @rank) rank,
        if(@de = totalScore, @num:=@num+1, @num:=0),
        @de:=totalScore  from(
        select @de:=0, @rank:=1, @num:=0,personName,personID,sum(score) totalScore
        from  person 
        group by personID,personName order by totalScore desc) tmp
即可

結果顯示爲:


如果需要給查詢的數據加條件,比如只對personID 爲1001,1003的人員進行統計排名:

 select personID, totalScore,personName,
        if(@de > totalScore, @rank:=@rank+@num+1, @rank) rank,
        if(@de = totalScore, @num:=@num, @num:=0),
        @de:=totalScore  from(
        select @de:=0, @rank:=1, @num:=0,personName,personID,sum(score) totalScore
        from  person where personID in ("1001","1003")
        group by personID,personName order by totalScore desc) tmp
結果爲:




接下來是統計某人的數據以及排名情況:

select personID, totalScore, personName, rank from (
 select personID, totalScore,personName,
        if(@de > totalScore, @rank:=@rank+@num+1, @rank) rank,
        if(@de = totalScore, @num:=@num, @num:=0),
        @de:=totalScore  from(
        select @de:=0, @rank:=1, @num:=0,personName,personID,sum(score) totalScore
        from person
        group by personID,personName order by totalScore desc) tmp ) tmp2 where personID="1003"

計算結果爲:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章