在 Laravel 中,在 GroupBy 之前使用 Orderby

我有一个表,我想选择具有最低/最低价格的产品名称,如下:


product_name | price 

Cat          |   12

Dog          |   21

Cat          |   14

Dog          |   20

Fish         |   10

Fish         |    3

期望输出应该是


Cat  | 12

Dog  | 20

Fish | 3

下面是我的 SQL 查询


$products = DB::table('products')

            ->orderBy('products.products_price', 'asc')

            ->groupBy('products.products_name')

            ->get();

当我使用这个脚本时,它只显示最高/最大价格,而不是最低价格


慕桂英3389331
浏览 48回答 1
1回答

至尊宝的传说

您需要聚合而不是排序。对于 Laravel,这意味着将列与 DB::raw 一起传递:$products = DB::table('products')        ->orderBy('products.products_price', 'asc')        ->groupBy('products.products_name')        ->select(['product_name', DB::raw('min(price) as price')])        ->get();编辑ID在这里去掉答案:SQL: Group by mini-value in one field while select different rows the mysql query will beSELECT p1.*     FROM products p1 INNER JOIN    (        SELECT product_name, MIN(price) AS as min_price        FROM products        GROUP BY product_name    ) p2 ON p1.product_name = p2.product_name AND p1.price = p2.min_price现在我们必须将其转换为查询生成器$products = DB::table('products AS p1')   ->join(DB::raw('(    SELECT product_name, MIN(price) AS as min_price    FROM products    GROUP BY product_name) AS p2'),     function($join)    {       $join->on('p1.product_name', '=', 'p2.product_name');       $join->on('p1.price', '=', 'p2.min_price');    })    ->get(['p1.id', 'p1.product_name', 'p1.price']);这还没有经过测试,所以我希望它有效
打开App,查看更多内容
随时随地看视频慕课网APP