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

Laravel中先OrderBy后GroupBy无法获取最低价格问题

解决Laravel Query Builder获取每组最低价格的问题

嘿,我来帮你搞定这个问题~你当前的写法存在一个逻辑误区:靠orderBy再groupBy的方式,并不能保证拿到每组的最低价格。因为当你执行groupBy时,数据库会对分组后的结果返回某一行数据(具体哪一行是由数据库的内部机制决定的,并不是按照你orderBy的顺序来选取的),这就是为什么你得到的是最高价格而非最低的原因。

正确的解决方案

要准确获取每个product_name对应的最低价格,你需要使用**聚合函数MIN()**来明确计算每组的最小值,具体代码如下:

$products = DB::table('products')
    ->select('product_name', DB::raw('MIN(price) as lowest_price'))
    ->groupBy('product_name')
    ->get();

代码解释

  • DB::raw('MIN(price) as lowest_price'):让数据库计算每个产品分组下价格的最小值,并给这个计算结果起一个别名lowest_price,方便你后续在结果集中调用这个值。
  • groupBy('product_name'):确保我们按照产品名称对数据进行分组,这样MIN(price)才会针对每个单独的产品计算最低价格。

如果你还需要对结果按最低价格进行排序,可以在末尾追加orderBy:

$products = DB::table('products')
    ->select('product_name', DB::raw('MIN(price) as lowest_price'))
    ->groupBy('product_name')
    ->orderBy('lowest_price', 'asc') // 按最低价格升序排列,也可以改为'desc'降序
    ->get();

这样执行后,你就能得到期望的结果:每个产品对应的最低价格啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:47:49