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

标签 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'
        ]
    );

最佳答案

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

Expression represents a DB expression that does not need escaping or quoting. Expression objects are mainly created for passing raw SQL expressions to methods of yii\db\Query, yii\db\ActiveQuery and related classes.

将您的代码更改为

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

关于sql - Yii2 如何将 SUM SQL 函数转换为查询生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53083764/

相关文章:

sql - 选择另一列中具有相同 id 但不同值的行

php - 如何在 codeigniter 中使用开始时间和结束时间检查行程开始日期和结束日期

mysql - Rails Active Record 组或忽略查询中的重复结果

file-upload - 在yii2中上传没有activeform的文件

sql - WINDOWS转Linux字符集问题

mysql - sql加入where和1-n连接

python - python 中用于 psycopg2 连接的长查询的 SQL 格式化示例

java - 将 PostgreSQL ltree 类型与 Java ORM 层一起使用

php - 如何限制php for循环中的条目数

mysql - Yii2:根据属性显示GridView结果