Yii2 - 得到一列的总和

Jos*_*shi 9 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
Run Code Online (Sandbox Code Playgroud)

我如何实现使用

yii\db\Query::sum('amount');
Run Code Online (Sandbox Code Playgroud)

我也尝试过

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

yii\db\Query::sum($command);
Run Code Online (Sandbox Code Playgroud)

但页面生成错误.

谢谢.

Cal*_*leb 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;
Run Code Online (Sandbox Code Playgroud)

您尝试的第二部分代码似乎是尝试使用数据访问对象.在这种情况下,你可以写原始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;
Run Code Online (Sandbox Code Playgroud)


Sta*_*nov 19

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

$this->find()->where(...)->sum('column');
Run Code Online (Sandbox Code Playgroud)

  • 当您使用模型本身时,它是干净和简单的。谢谢! (2认同)

小智 7

我希望你的型号名称是Billing

在Billing模型中使用

$this->find()->sum('amount');
Run Code Online (Sandbox Code Playgroud)

在其他模型中

Billing::find()->sum('amount');
Run Code Online (Sandbox Code Playgroud)


Dhe*_*ngh 6

您可以在搜索模型中直接使用yii查询概念

$this->find()->from('billing')->where(['column'=>value])->sum('amount');
Run Code Online (Sandbox Code Playgroud)

要么

$this->find()->where(['column'=>value])->sum('amount');
Run Code Online (Sandbox Code Playgroud)

模型外部(计费是模型名称)

Billing::find()->where(['column'=>value])->sum('amount');
Run Code Online (Sandbox Code Playgroud)