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

Laravel MySQL查询:获取团队积分排名,返回前2含同分团队

Laravel 查询实现团队积分榜(含同分第二名全部返回)

需求说明

生成团队积分榜,返回积分最高的前2个排名组:

  • 积分最高的团队(排名1)必选
  • 所有与第二名积分相同的团队全部返回,不受数量限制
  • 结果需包含团队ID、名称、积分及对应排名

实现方案(基于MySQL 8.0+)

利用MySQL的DENSE_RANK()窗口函数实现同积分同排名的逻辑,再通过Laravel查询构造器封装:

方式1:CTE写法(Laravel 8+推荐)

$topTeams = DB::table('teams')
    ->withExpression('ranked_teams', function ($query) {
        $query->select(
            'id',
            'name',
            'total_points',
            DB::raw('DENSE_RANK() OVER (ORDER BY total_points DESC) AS `rank`')
        );
    })
    ->select('*')
    ->from('ranked_teams')
    ->where('rank', '<=', 2)
    ->get();

方式2:子查询兼容写法

$subQuery = DB::table('teams')
    ->select(
        'id',
        'name',
        'total_points',
        DB::raw('DENSE_RANK() OVER (ORDER BY total_points DESC) AS `rank`')
    );

$topTeams = DB::table($subQuery, 'ranked')
    ->select('*')
    ->where('rank', '<=', 2)
    ->get();

结果验证

针对提供的测试数据,运行代码后会返回以下结果:

idnametotal_pointsrank
1ABC2501
2DEF1202
3PQR1202

注意事项

  • 需使用MySQL 8.0及以上版本,DENSE_RANK()窗口函数是8.0版本新增特性
  • 若需兼容更低版本MySQL,需用变量手动计算排名,但逻辑较繁琐,建议优先升级数据库版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:06:25