Laravel每分组行的分组依据和总和

时间:2019-04-11 06:31:15

标签: php mysql laravel

我的目标

我希望按订单的“ type_id”对它们进行分组,并计算每组订单的“ volume_remain”之和。我正在寻找一个查询来做到这一点。也许值得一提的是,我的订单表包含约200.000行。

我正在使用Laravel框架(5.8),但对于基本性质不是很强的查询我没有经验。由于缺乏经验,我没有做太多尝试。

这是我的订单表的构建方式。

Schema::create('orders', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('type_id')->index();
            $table->bigInteger('order_id')->index();
            $table->integer('duration');
            $table->string('is_buy_order');
            $table->string('issued');
            $table->integer('location_id');
            $table->integer('min_volume');
            $table->bigInteger('price');
            $table->string('range');
            $table->integer('system_id');
            $table->integer('volume_remain');
            $table->integer('volume_total');
            $table->timestamps();
        });

type_id :表示游戏中的物品

订单:代表游戏内市场上特定物品的1个订单

volume_remain :该特定订单仍在市场上的商品数量

因此每个订单都属于一个type_id,一个type_id可以有很多订单。

所需结果

我希望得到的结果是按其type_id分组的订单的集合,但是只有不超过其volume_remain的特定总和的订单。

1 个答案:

答案 0 :(得分:2)

您可以查询类似的内容

DB::table("orders")->select("id", "type_id", "order_id", "duration",  
"is_buy_order", "issued", "location_id", "min_volume", "price", "range", 
"system_id", DB::raw("SUM(volume_remain) vr"))->groupBy("type_id")        
 ->havingRaw("vr <= ?",['specific sum']);

specific sum-将不超过的数量。替换为您的相关金额。