You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于total字段求和结果计算学生排名?

按learner_id计算总分并排名的实现方案

SQL 实现方式

  • 先按learner_id分组求和total,得到每位学生的总分:
SELECT learner_id, SUM(total) AS total_score
FROM your_table_name
GROUP BY learner_id;
  • 基于总分添加排名,根据不同需求选择对应函数:
    • 同分排名相同,后续排名跳跃(如1,1,3):使用RANK()
    SELECT 
        learner_id, 
        SUM(total) AS total_score,
        RANK() OVER (ORDER BY SUM(total) DESC) AS ranking
    FROM your_table_name
    GROUP BY learner_id
    ORDER BY ranking;
    
    • 同分排名相同,后续排名连续(如1,1,2):使用DENSE_RANK()
    SELECT 
        learner_id, 
        SUM(total) AS total_score,
        DENSE_RANK() OVER (ORDER BY SUM(total) DESC) AS ranking
    FROM your_table_name
    GROUP BY learner_id
    ORDER BY ranking;
    
    • 每个排名唯一(同分按数据顺序排):使用ROW_NUMBER()
    SELECT 
        learner_id, 
        SUM(total) AS total_score,
        ROW_NUMBER() OVER (ORDER BY SUM(total) DESC) AS ranking
    FROM your_table_name
    GROUP BY learner_id
    ORDER BY ranking;
    

Python Pandas 实现方式

假设数据已加载到DataFramedf中:

  • 第一步:分组求和得到总分
total_scores = df.groupby('learner_id')['total'].sum().reset_index(name='total_score')
  • 第二步:添加排名列,对应不同规则:
    • 同分排名相同,后续跳跃:
    total_scores['ranking'] = total_scores['total_score'].rank(method='min', ascending=False).astype(int)
    
    • 同分排名相同,后续连续:
    total_scores['ranking'] = total_scores['total_score'].rank(method='dense', ascending=False).astype(int)
    
    • 排名唯一(同分按原数据顺序排):
    total_scores['ranking'] = total_scores['total_score'].rank(method='first', ascending=False).astype(int)
    
  • 最后按排名排序:
total_scores_sorted = total_scores.sort_values(by='ranking')

内容的提问来源于stack exchange,提问作者Oblongata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:15:57