我有一个简单的SQL查询:
SELECT product_name, SUM (product_amount)
FROM orders
GROUP BY product_name;
它将显示带有产品名称及其数量的列表。像这个例子:
我想将其翻译为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'
]
);
答案 0 :(得分:3)
您在尝试调用SQL SUM()
函数时需要在选择时使用yii\db\Expression
,并且选择时需要不引用该函数。
Expression表示执行以下操作的数据库表达式 不需要转义或引用。表达式对象主要用于将原始SQL表达式传递给
yii\db\Query
,yii\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();