我try 在单个查询中使用多个Count和Sum命令. 然而,当我使用以下内容时,会发生什么情况:

SUM(amount AND type = "dispute") as charge

它实际上计算的是记录的数量,而不是总数. 我想要做的是多次使用带有WHERE子句的SUM,例如:

`$query = DB::table('cash_table')
        ->where('transaction_created', '>=', Carbon::now()->startOfWeek())
        ->select(DB::raw('
            SUM(amount) as transaction_amount,
            COUNT(amount) as transaction_count,
            SUM(amount) WHERE type = "dispute" as charge_amount
            COUNT(amount) WHERE type = "dispute" as charge_count
            SUM(loan_amount) WHERE type = "loan" as loan_amount
            COUNT(loan_amount) WHERE type = "loan" as loan_count
            '))
        ->groupBy('transaction_created')
        ->get();`

前两个"TRANSACTION_AMOUNT&TRANSACTION COUNT"运行良好,因为没有WHERE子句",而另一个则不行.

推荐答案

试试下面的吧!

$query = DB::table('cash_table')
            ->where('transaction_created', '>=', Carbon::now()->startOfWeek())->select(
                DB::raw('SUM(CASE WHEN type = "dispute" THEN amount ELSE 0 END) as charge'),
                DB::raw('SUM(CASE WHEN type = "refund" THEN amount ELSE 0 END) as refund'),
                DB::raw('COUNT(CASE WHEN status = "approved" THEN 1 ELSE NULL END) as transaction_count'),
                DB::raw('SUM(amount) as transaction_amount')
            )
            ->groupBy('transaction_created')
            ->get();

Laravel相关问答推荐

Laravel将变量从模板到已发布的供应商模板

如何使用PHP版本8.2.6安装beyondcode/laravel-websockets软件包?

Inertiajs - 使用链接组件添加记录但无法在不使用表单的情况下清除文本区域

laravel 如何验证跨越午夜的两个值之间的时间(15:00 > 时间 > 01:00)

Laravel 5 如何配置 Queue 数据库驱动程序以连接到非默认数据库?

Laravel 5 将错误发送到Electron邮件

Laravel 有Many Many to Many To One Eloquent

刚安装 Lumen 并得到 NotFoundHttpException

转储或 dd laravel 在结果前添加字符时出错

Laravel transformer vs resource

没有 index.php 的路由不起作用

PHP 中的 Http 响应代码枚举

在 laravel 5.2 中禁用特定路由的 Web 中间件

laravel 预期响应代码 250 但得到代码530

Eloquent - 更新集合中的所有模型

升级到 laravel 5.3 后错误 datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00:00'

Laravel 仓库

Laravel 数据库模式中的 MediumBlob

如何以 JSON 格式发送 Laravel 错误响应

如何隐藏配置文件以防止直接访问?