排名系统排名输出中的差距

时间:2018-10-05 02:12:50

标签: mysql

我有一个项目,该项目按得分对不同项目进行排名,虽然排名还可以,但是当得分相同时,它会显示差距。

以下是查询:

res = []

for i, v in enumerate(s):
    if not i % 2:
        res.append(v.upper())
    else:
        res.append(v.lower())

print(''.join(res))

,它的输出是这样的:

output

有什么办法解决这个问题? 在此先感谢您的英语不好

1 个答案:

答案 0 :(得分:1)

您基本上需要Dense_Rank()之类的功能(在MySQL 版本> = 8.0 中可用)。在 MySQL的较旧版本中,它可以是emulated using Session Variables

  • Derived table中,确定scc_bgyscoretotal的等级(具有等级1的最高值,依此类推)。首先,获取scc_bgyscoretotal的唯一值,然后使用Session Variables确定其排名。
  • 现在,只需使用bgyprofile将这些派生表联接到主表scc_bgyscoretotal

尝试以下操作:

SELECT t2.bgycode, 
       t2.scc_bgyscoretotal, 
       dt2.`rank` 
FROM bgyprofile AS t2 
JOIN 
(
 SELECT dt1.scc_bgyscoretotal, 
        @rank_no := @rank_no + 1 AS `rank`  
 FROM 
 (
  SELECT t1.scc_bgyscoretotal 
  FROM bgyprofile AS t1 
  GROUP BY t1.scc_bgyscoretotal 
  ORDER BY t1.scc_bgyscoretotal DESC
 ) AS dt1 
 CROSS JOIN (SELECT @rank_no := 0) AS init1
) AS dt2 ON dt2.scc_bgyscoretotal = t2.scc_bgyscoretotal