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

Laravel使用group by分组时如何忽略null值不进行合并

解决方案

这个需求完全可以实现,核心思路是调整分组规则:非空的content_related_group按原有字段分组,值为null的记录用唯一主键作为分组依据,保证每个null值记录单独成组。

调整后的查询代码

$products = DB::table('product')
        ->select('*', DB::raw('count(*) as total'))
        ->orderBy('created_at', 'desc')
        // 核心修改:分组规则区分null和非null值
        ->groupBy(DB::raw('CASE WHEN content_related_group IS NOT NULL THEN content_related_group ELSE id END'))
        ->paginate(9);

逻辑说明

  • 当content_related_group不为null时,分组依据为该字段本身,相同值的记录会合并为同一组,符合原有需求
  • 当content_related_group为null时,分组依据替换为唯一主键id,每个记录的id都是唯一值,因此所有null值记录都会单独保留,不会被合并
  • 调整后对应你给出的示例数据,刚好可以得到你预期的3条查询结果。

注意事项

如果你的数据库开启了ONLY_FULL_GROUP_BY模式(MySQL 5.7及以上版本默认开启),直接使用select *可能会触发SQL语法报错,因为分组后未出现在group by条件中的非聚合字段无法被直接查询。这种情况可以调整select部分,明确指定需要的字段,或配合子查询先排序再取分组内的目标记录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:24:04