我的目标
我希望按订单的“ 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的特定总和的订单。
答案 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
-将不超过的数量。替换为您的相关金额。