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

Laravel使用groupBy分组时如何同时查询多个字段

解决方案

根据你的需求分两种常见场景处理:

场景1:将name、positions作为分组统计的维度

也就是统计相同国家、相同姓名、相同职位的记录总数,这种写法完全符合SQL标准,兼容开启了ONLY_FULL_GROUP_BY模式的数据库(MySQL默认开启):

Data::select('country', 'name', 'positions', DB::raw('count(*) as total'))
    ->groupBy('country', 'name', 'positions')
    ->get();

场景2:仅按country分组,同时保留该分组下所有的name、positions值

如果你不需要把姓名和职位作为分组维度,只需要按国家统计总数,同时拿到该国家下所有的姓名、职位列表,可以用聚合函数拼接字段值,示例用MySQL的GROUP_CONCAT实现:

Data::select(
    'country',
    DB::raw('GROUP_CONCAT(DISTINCT name SEPARATOR ", ") as all_names'),
    DB::raw('GROUP_CONCAT(DISTINCT positions SEPARATOR ", ") as all_positions'),
    DB::raw('count(*) as total')
)
->groupBy('country')
->get();

如果数据量不大,也可以先分组查询国家的统计结果,再通过Laravel集合方法匹配补充对应name、positions字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:42:00