2015-03-03 60 views
0

我的表結構如何計算排名基於MySQL服務器最高分和最低分

CREATE TABLE IF NOT EXISTS `tbl_user_result` (
    `Id` int(11) NOT NULL AUTO_INCREMENT, 
    `ResultId`int(11), 
    `PaperId` int(11) , 
    `Title` varchar(45), 
    `TotalQuestions` int(11) , 
    `Attempt` int(11) , 
    `Correct` int(11) , 
    `Wrong` int(11) , 
    `Score` int(45) , 
    `Minutes` int(11) , 
    `TimeSt` varchar(45) , 
    `UserEmail` varchar(45) , 
    `UserName` varchar(45) , 
    PRIMARY KEY (`Id`)); 

我嘗試以下SQL查詢

SELECT 
    id, 
    PaperId, 
    Title, 
    Score, 
    Minutes, 
    (SELECT 
      COUNT(*) + 1 
     FROM 
      tbl_user_result 
     WHERE 
      Score > x.Score AND Minutes > x.Minutes) AS Rank 
FROM 
    `tbl_user_result` as x 
+0

有什麼不對?請更具體一些。 – reporter 2015-03-03 12:04:12

+0

我嘗試給出錯誤的輸出。如果我將Where子句修改爲「Score> x.Score」,則此結果僅基於得分 – 2015-03-03 12:06:43

回答

3

最簡單的方法是使用變量:

select r.* 
from (select r.*, (@rn := @rn + 1) as rank 
     from tbl_user_result r cross join (select @rn := 0) vars 
     order by score desc, minutes asc 
    ) r; 

如果您沒有重複項,這可以正常工作。

我認爲以下是您要查詢的版本:

SELECT id, PaperId, Title, Score, Minutes, 
     (SELECT COUNT(*) + 1 
     FROM tbl_user_result r2 
     WHERE r2.Score > r.Score OR 
       (r2.Score = r.Score AND r2.Minutes < r.Minutes) 
     ) AS Rank 
FROM tbl_user_result r; 
+0

顯示錯誤的語法:在'AS Rank FROM tbl_user_result r'' – 2015-03-03 12:11:12

+0

附近使用的語法嘿,只是缺少括號。作品篦,非常感謝你「專家」 – 2015-03-03 12:21:01