我在指南中找到了这个,但不知道如何实现相同的
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);
但页面生成错误。
感谢。
答案 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');