如何根据 MySql Server 中的最高分和最低分计算排名 [英] How can I calculate rank based on highest Score and lowest Minutes in MySql Server

查看:88
本文介绍了如何根据 MySql Server 中的最高分和最低分计算排名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的表结构是

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 查询

I tried following SQL query

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

推荐答案

最简单的方法是使用变量:

The easiest way is to use variables:

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;

如果您没有重复项,这有效.

This works if you have no duplicates.

我认为以下是您想要的查询版本:

I think the following is the version of your query that you want:

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;

这篇关于如何根据 MySql Server 中的最高分和最低分计算排名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆