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
相关产品推荐
相关产品推荐

