yii2:如何通过查询计算一个组的总和


yii2: how to calculate the sum of a groupby query

我正在尝试计算groupby查询的总和,并将该值发送到yii2中的视图。我当前的代码获取并显示了正确的分组,但总和不起作用。

这是控制器代码:

public function actionIndex()
    {   
        if( Yii::$app->request->post('search') )
        {
            $from = Yii::$app->request->post('from');
            $to   = Yii::$app->request->post('to');
            switch( Yii::$app->request->post('activity') )
            {
                case 'bills':
                    $searchModel = new Bill();
                    $query = $searchModel::find();
                    $query->where(['BETWEEN', 'teis_bill_purchase_date', $from, $to]);
                    // The problem is in the below sum
                    $query->joinWith('inventory');
                    $query->groupBy('teis_inventory_id');
                    $query->sum('teis_bill_override_cbm');
                    $query->all();
                    $dataProvider = new ActiveDataProvider([
                            'query' => $query,
                    ]);
                    return $this->render('index', [
                        'searchModel' => $searchModel,
                        'dataProvider' => $dataProvider,
                        'show_results' => 1
                    ]);
                    break;
            }
        }
        return $this->render('index');
    }

我有不同类型的存货,每个存货都有多张账单。我正在尝试创建一个报告,获取特定日期范围($from,$to)之间的账单数量,按库存类型对其进行分组,并汇总每种类型的值并显示该类型的值。

这是我的视图代码:

if( isset($show_results) )
        {
            print(GridView::widget([
                'dataProvider' => $dataProvider,
                'filterModel' => $searchModel,
                'columns' => [
                    ['class' => 'yii'grid'SerialColumn'],
                    [
                        'attribute'=>'teis_bill_id',
                        'value'=>'teis_bill_id',
                    ],
                    'inventory.teis_inventory_type',
                    'teis_bill_pieces',
                    'teis_bill_override_cbm',
                    'teis_bill_sale_price',
                    'teis_bill_profit',
                    ['class' => 'yii'grid'ActionColumn'],
                ],
            ]));
        }

我已经包含了视图的代码,因为我不知道如何在得到它后显示它!

任何帮助都将不胜感激。非常感谢。

我认为问题与sum('teis_bill_override_cbm')字段的混叠有关

尝试选择您的字段,并将总和('eis_bill_override_cbm')用作teis_bill_override_cbm

$searchModel = new Bill();
$query = $searchModel::find();
$query->select('teis_bill_id, inventory.teis_inventory_type,
                 sum(teis_bill_override_cbm ) as teis_bill_override_cbm, 
                      teis_bill_pieces, teis_bill_sale_price, teis_bill_profit');
$query->where(['BETWEEN', 'teis_bill_purchase_date', $from, $to]);
// The problem is in the below sum
$query->joinWith('inventory');
$query->groupBy('teis_inventory_id');
//$query->sum('teis_bill_override_cbm'); already calculated
$query->all();

这里的问题是$query->all()以数组的形式返回结果,但结果没有保存在任何变量中。

请改用$var = $query->all();,以便保存执行语句的结果。