Yii2如何将SUM SQL函数转换为查询生成器?

时间:2018-10-31 12:50:12

标签: sql postgresql yii2 query-builder

我有一个简单的SQL查询:

SELECT product_name, SUM (product_amount) 
FROM orders
GROUP BY product_name;

它将显示带有产品名称及其数量的列表。像这个例子:

SQL query result

我想将其翻译为Yii2查询生成器。我不知道如何使用SUM函数。我试过了,但是没用:

Orders::find()
    ->select(
        [
            Orders::tableName() . ".product_name",
            (new \yii\db\Query())->sum(Orders::tableName() . ".product_amount")
        ]
    )
    ->groupBy(
        [
            Orders::tableName() . '.product_name',
            Orders::tableName() . '.product_amount'
        ]
    );

2 个答案:

答案 0 :(得分:3)

您在尝试调用SQL SUM()函数时需要在选择时使用yii\db\Expression,并且选择时需要引用该函数。

  

Expression表示执行以下操作的数据库表达式   不需要转义或引用。表达式对象主要用于将原始SQL表达式传递给yii\db\Queryyii\db\ActiveQuery和相关类的方法。

将代码更改为

Orders::find()
    ->select(['product_name', new \yii\db\Expression('SUM(product_amount)')])
    ->groupBy('product_name,product_amount')
    ->all();

答案 1 :(得分:0)

尝试以下代码:

$result = Orders::find()
    ->select(['product_name', 'SUM(product_amount) AS amt'])
    ->groupBy(['product_name'])
    ->all();