【问题标题】:Yii2 - getting sum of a columnYii2 - 获取一列的总和
【发布时间】:2018-10-23 13:02:58
【问题描述】:

我在指南中找到了这个,但不知道如何实现它

yii\db\Query::count(); 返回 COUNT 查询的结果。其他 类似的方法包括sum($q)average($q)max($q)min($q),其中 支持所谓的聚合数据查询。 $q 参数为必填项 对于这些方法,可以是列名或表达式。

例如,我有一个带有列的表名“帐单”:

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);

但是页面会产生错误。

谢谢。

【问题讨论】:

    标签: yii2


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。它工作正常。但在第一个解决方案中,我必须编辑$sum = $query->sum('amount'); 这样的行,可以吗?如果我按原样使用代码,则会收到错误 - 调用非对象上的成员函数 sum()
    • 很高兴它有效!您对变量名称的看法是正确的,我已经更新了帖子。
    【解决方案2】:

    在模型中,总和也可以通过以下方式获取:

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

    【讨论】:

    • 当您使用模型本身时,它干净简单。谢谢!
    【解决方案3】:

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

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

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

    在模型之外(计费是模型名称)

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

    【讨论】:

    • 这样可以在搜索模型中添加功能,可以在网格或其他需要的地方使用。 public function getTotalamount() { return $this->find()->from('billing')->where(['column'=>value])->sum('amount'); }
    • 计费是型号名称
    【解决方案4】:

    我希望您的型号名称是 Billing

    内部计费模型使用

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

    在其他型号中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多