[英]mySQL sum multiple rows and rank handling ties
我有下表:
userid compid round score bonus
2980 3 0 50 0
50 3 0 80 0
52 3 0 80 0
55 3 0 20 0
58 3 0 100 0
106 3 0 120 0
555 3 0 50 0
100 3 0 30 0
50 3 1 90 0
52 3 1 50 0
106 3 1 30 0
我不僅希望能夠對每個用戶在所有回合中的得分和獎金列進行求和,還希望能夠對它們進行相應的排名。 它應該能夠處理與序列 1、2、2、4、5、5、5、8 的關系:
訣竅是我不想創建臨時表或將排名插入表中。 此外,我不能限制回報 - 所以無論是否完成了回合,它都需要對整個表格進行排名。
我已經設法對行進行排名,但似乎無法將它們與總和分組。 當然,我已經分別管理了總和——我只需要“加入”這兩個步驟。
獲取每個用戶的總和:
SELECT userid,sum(score+bonus) as tscore from entries
group by userid order by tscore desc
userid tscore
50 170
106 150
52 130
58 100
2980 50
555 50
100 30
55 20
沒有分數總和的排名:(感謝 MySQL Cookbook)
SELECT @rownum := @rownum + 1 AS row,
@rank := IF(@prev_val!=score,@rownum,@rank) AS rank,
userid,
@prev_val := score AS score
FROM exodus_entries ORDER BY score DESC
row rank userid score
1 1 106 120
2 2 58 100
3 3 50 90
4 4 50 80
5 4 52 80
6 6 52 50
7 6 555 50
8 6 2980 50
9 9 100 30
10 9 106 30
11 11 55 20
感謝您的時間和幫助! 歡迎大家咨詢!
SELECT @rownum := @rownum + 1 AS row,
@rank := IF(@prev_val!=score,@rownum,@rank) AS rank,
userid,
@prev_val := score AS score
FROM (
SELECT userid, sum(score+bonus) as score
from entries
group by userid
) exodus_entries
ORDER BY score DESC
我有同樣的問題,我執行了SET @rownum = 0, @rank = 1, @prev_val = NULL;
在運行以下代碼之前:
SELECT @rownum := @rownum + 1 AS row,
@rank := IF(@prev_val!=total_number,@rownum,@rank) AS rank,
your_column,
@prev_val := total_number AS total_number
FROM your_table ORDER BY total_number DESC;
我認為這應該可以解決問題:
SELECT userid,round, sum(score+bonus) as tscore from entries
group by userid, round order by tscore desc
雖然沒有測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.