Yii2 - 得到一列的总和

时间:2014-11-10 20:30:49

标签: 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);

但页面生成错误。

感谢。

4 个答案:

答案 0 :(得分:20)

您尝试过的代码的第一部分似乎是尝试使用查询生成器。在这种情况下,您必须创建查询实例,设置目标表,然后计算总和:

  

通过查询生成器   (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;

您尝试过的第二部分代码似乎是在尝试使用数据访问对象。在这种情况下,您可以编写原始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;

答案 1 :(得分:17)

在模型中,也可以使用以下内容获取总和:

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

答案 2 :(得分:7)

我希望您的型号名称为Billing

在Billing模型中使用

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

在其他模特中

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

答案 3 :(得分:5)

您可以直接在搜索模型中使用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');