對錶中人員的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"
計算結果爲: