mysql - 选择 Laravel 中列的总和等于另一个表中另一列的值的所有行

标签 mysql laravel laravel-5 sum

在 Laravel 中选择列总和等于另一个表上另一列的值的所有行

购买

id | name               | amount
1  | Gamerzone Book     | 40
2  | Recipe Book        | 20
3  | EngineX Book       | 10

付款

id  | purchase_id  | amount  
1     1              25       
2     1              15       
2     2              10   

代码

$query = DB::table('purchases')
        ->select(['purchases.id','purchases.name',
                   DB::raw("IFNULL(sum(payments.amount),0) as total")
            ])
         ->leftJoin('payments','payments.purchase_id','=','purchases.id')
         ->having('amount','=',DB::raw('total'));
         ->groupBy('purchases.id')->get();

当我运行代码时,出现以下错误 未找到列:1054“having 子句”中未知列“amount”

预期结果

id | name               | total
1  | Gamerzone Book       40

我尝试了所有这些,但似乎没有任何效果

$query->where('purchases.amount','=',DB::raw('total'));
$query->having(DB::raw('purchases.amount'),'=',DB::raw('total'));
$query->havingRaw('IFNULL(sum(purchases.amount),0) = purchases.amount');

最佳答案

$paymentsQuery = DB::table('payments')->select(DB::raw("IFNULL(sum(payments.amount),0) as total"))->whereRaw('purchases.id = purchase_id')->groupBy('purchase_id');

$purchasesQuery = DB::table('purchases')->select(['id', 'name', 'amount', DB::raw('(' . $paymentsQuery->toSql() . ') as total')])->havingRaw('amount = total')->mergeBindings($paymentsQuery);

$result = $purchasesQuery->get();

$ paymentsQuery 将作为子查询来获取每个购买行的总计。

结果我们得到如下sql:

select `id`, `name`, `amount`, 
(select IFNULL(sum(payments.amount),0) as total from `payments` where purchases.id = purchase_id group by `purchase_id`) as total 
from `purchases` 
having amount = total

关于mysql - 选择 Laravel 中列的总和等于另一个表中另一列的值的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551286/

相关文章:

mysql - 如何在mysql中将字段的内容作为语句执行?

php - Linux/Laravel - 如何共享来自不同项目(同一服务器)的上传内容并在 1 个子域上显示它们?

php - Laravel 查询按两个不同的日期分组

php - 在运行时为用户更新配置

php - Laravel 和 WordPress 前端

php - 在 MySQL 中插入 mm/dd/yyyy 格式的日期

mysql - Laravel 6 - 更新模型时间戳

php - 如何根据日期获取价格并将价格作为总价求和?

php - 同一台机器上不同用户的多个MySQL实例

php - Laravel View Make 返回空白页