簡體   English   中英

mySQL 對多行和排名處理關系求和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM