1、需求是統計用戶答題的榜單,用戶答題的數據表存了用戶id,答題題目和答題時間,現在需要根據答題數和答題時間進行統計和得到排名。2、之前嘗試使用了以下方法進行統計
SET @counter=0;
select @counter:=@counter+1 AS rank,uid,count(*) answercount,sum(finishtime) timestampsum from huiyi_answer_record group by uid order by answercount DESC,timestampsum ASC limit 0,10;
然后發現排名只依賴第一個Order條件,當第二個條件導致順序改變的時候排名依舊沒有改變。3、問題1:請問應該怎么正確對統計后的數據進行排名(有分頁)?4、問題2:請問在每次分頁下,怎么能直接得到某個用戶的排名和數據?
5、補充測試結果。如圖,mysql返回的結果排序是正確的,但rank不對。
5 回答
紫衣仙女
TA貢獻1839條經驗 獲得超15個贊
用子查詢
SET @counter=0;
select t2.* from (
select t1.*,@counter:=@counter+1 AS rank from (
select uid,count(*) answercount,sum(finishtime) timestampsum from huiyi_answer_record group by uid order by answercount DESC,timestampsum asc
) as t1
) as t2 limit 2,2;
# 或者
SET @counter=2; #查詢第二頁,假如每頁2條,起始值就是2
select t1.*,@counter:=@counter+1 AS rank from (
select uid,count(*) answercount,sum(finishtime) timestampsum from huiyi_answer_record group by uid order by answercount DESC,timestampsum asc
) as t1 limit 2,2
慕沐林林
TA貢獻2016條經驗 獲得超9個贊
你是想對答題數目 和 時間 分別賦予不同權重么.
像你這種排序, 它是優先第一位的
就好比
A B
20 5
19 9999
不管你B有多大, 你的A比別人小它永遠在后面
- 5 回答
- 0 關注
- 696 瀏覽
添加回答
舉報
0/150
提交
取消
