web-dev-qa-db-ja.com

Yii2-列の合計を取得する

ガイドでこれを見つけましたが、同じように実装する方法がわかりません

yii\db\Query::count();は、COUNTクエリの結果を返します。他の同様のメソッドには、いわゆる集計データクエリをサポートするsum($q)average($q)max($q)min($q)などがあります。 $qパラメータはこれらのメソッドに必須であり、列名または式のいずれかになります。

たとえば、「billing」というテーブル名と列があるとします。

name     amount
charge1  110.00
charge2  510.00
Total -  620.00

を使用して実装する方法

yii\db\Query::sum('amount');

私も試してみました

$command = Yii::$app->db->createCommand("SELECT sum(amount) FROM billing");

yii\db\Query::sum($command);

しかし、ページはエラーを生成します。

ありがとう。

9
Joshi

試したコードの最初の部分は、クエリビルダーを使用しようとしているようです。この場合、クエリのインスタンスを作成し、ターゲットテーブルを設定して、合計を計算する必要があります。

クエリビルダー経由( http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html ):

_$query = (new \yii\db\Query())->from('billing');
$sum = $query->sum('amount');
echo $sum;
_

試行したコードの2番目の部分は、データアクセスオブジェクトを使用しようとしているようです。この場合、生のSQLを記述してデータベースをクエリできますが、queryOne()queryAll()queryColumn()、またはqueryScalar()を使用して、クエリを実行します。 queryScalar()は、このような集約クエリに適しています。

データアクセスオブジェクト経由( http://www.yiiframework.com/doc-2.0/guide-db-dao.html ):

_$command = Yii::$app->db->createCommand("SELECT sum(amount) FROM billing");
$sum = $command->queryScalar();
echo $sum;
_
20
Caleb

モデル内では、合計は次のようにフェッチすることもできます。

$this->find()->where(...)->sum('column');
19

モデル名がBillingであることを願っています

内部課金モデルの使用

$this->find()->sum('amount');

他のモデル

Billing::find()->sum('amount');
7
sujoi

検索モデルでyiiクエリの概念を直接使用できます

$this->find()->from('billing')->where(['column'=>value])->sum('amount');

OR

$this->find()->where(['column'=>value])->sum('amount');

モデル外(課金はモデル名)

Billing::find()->where(['column'=>value])->sum('amount');
6
Dheeraj singh