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

Laravel如何按用户数量排序获取用户所属国家的分布情况?

解决方案:Laravel按用户数排序获取国家信息

嘿,我懂你要的需求——不用关联查询,直接按每个国家的用户数量从多到少拿到对应的国家数据对吧?Laravel的查询构造器或者Eloquent集合都能轻松实现,给你两种靠谱的方案:

方案一:数据库层面分组统计(推荐,性能更优)

直接在数据库里完成分组和统计,适合数据量较大的场景,效率比内存处理高很多:

use App\Models\User;
use Illuminate\Support\Facades\DB;

$countries = User::select('country', DB::raw('count(*) as user_count'))
    // 可选:过滤掉country为空的用户
    ->whereNotNull('country')
    ->groupBy('country')
    ->orderByDesc('user_count')
    ->get();

代码解释:

  • select('country', DB::raw('count(*) as user_count')):指定要查询的country字段,同时用count(*)统计每个分组的用户数,并给统计结果起别名user_count
  • groupBy('country'):按国家字段分组,把同一个国家的用户归为一组
  • orderByDesc('user_count'):按用户数从多到少排序
  • get():执行查询并返回Eloquent集合

方案二:集合层面处理(适合已获取用户集合的场景)

如果已经拿到了所有用户的集合,也可以在内存里完成分组统计:

$users = User::all();

$countries = $users->groupBy('country')
    ->map(function ($userGroup) {
        return [
            'country' => $userGroup->first()->country,
            'user_count' => $userGroup->count()
        ];
    })
    ->sortByDesc('user_count')
    ->values();

代码解释:

  • groupBy('country'):把用户集合按国家分组
  • map():将每个用户分组转换成包含国家名和用户数的数组
  • sortByDesc('user_count'):按用户数倒序排列集合
  • values():重置集合的索引,避免分组后索引混乱

两种方案都能得到你需要的、按用户数排序的国家集合,优先选方案一哦,数据库层面处理性能更好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:52:05