我的列名为PlanCost
Discount
AmountPaid
,标签包含Due
在这里,我试图只显示PlanCost != AmountPaid
这是我的整个查询
$getID = isset($inputArray['id']) ? $inputArray['id'] : 0;
$query = TelePlanSelect::join('tele_plan', 'tele_plan.id', '=', 'tele_plan_select.teleplan_id' )
->leftjoin('tele_payment_defs', 'tele_payment_defs.telereg_id', '=', 'tele_plan_select.telereg_id')
->leftjoin('tele_payment_items', function ($join){
$join->on('tele_payment_items.telepaymentdefs_id', '=', 'tele_payment_defs.id')
->on('tele_payment_items.teleplan_id', '=' ,'tele_plan.id');
} )
->selectRaw('tele_plan.id as `PlanID`,' .
'tele_plan.plan_name as `PlanName`,' .
'tele_plan.plan_cost as `PlanCost`,' .
'tele_plan.plan_details as `PlanDetails`,'.
'sum(tele_payment_items.amount) as `AmountPaid` ,'.
'COALESCE(sum(tele_payment_items.discount),0) as `Discount`,'.
'(COALESCE(tele_plan.plan_cost,0) - sum(COALESCE(tele_payment_items.discount,0))) - sum(coalesce(tele_payment_items.amount, 0)) as `Due` '
)
->where('tele_plan_select.telereg_id', $getID)
->groupBy('tele_plan.id')
->where(' tele_plan.plan_cost', '!=', 'sum(tele_payment_items.amount)');
我不确定我们是否可以在sum
中使用where/whereraw
有人能帮助我吗?
编辑1:
{"message":"SQLSTATE[HY000]: General error: 1111 Invalid use of group function (SQL: select count(*) as aggregate from (select tele_plan.id as
PlanID ,tele_plan.plan_name as
PlanName ,tele_plan.plan_cost as
PlanCost ,tele_plan.plan_details as
PlanDetails ,sum(tele_payment_items.amount) as
AmountPaid ,COALESCE(sum(tele_payment_items.discount),0) as
折扣,(COALESCE(tele_plan.plan_cost,0) - sum(COALESCE(tele_payment_items.discount,0))) - sum(coalesce(tele_payment_items.amount, 0)) as
由于from
tele_plan_select {{ 1}} tele_plan inner join
tele_plan on
ID为.
tele_plan_select =
teleplan_id .
tele_payment_defs left join
tele_payment_defs on
telereg_id {{1} } tele_plan_select .
telereg_id =
tele_payment_items .
tele_payment_items left join
telepaymentdefs_id on
tele_payment_defs .
ID为=
tele_payment_items .
teleplan_id and
{tele_plan {1}} ID为.
{tele_plan_select {1}} {telereg_id {1}} {tele_plan {1}} ID为=
答案 0 :(得分:0)
您可以使用像sum
这样的原始sql函数,但是您必须将它们包装在laravel的\DB::raw()
函数中,这样它们就不会被转义。
对于您的Where
子句,您应该执行以下操作
->where('tele_plan.plan_cost', '<>', \DB::raw('sum(tele_payment_items.amount)'));
您也可以使用laravel的WhereRaw
函数编写自己的条件:
->whereRaw('tele_plan.plan_cost <> sum(tele_payment_items.amount)')
<强>更新强> 该错误表明GroupBy存在问题。这样做的原因是因为一个总和只能在一个组之后完成,但是一个不可以。因此,这必须添加到HAVING clause。
用a替换where,这应该有效:
->havingRaw('tele_plan.plan_cost <> sum(tele_payment_items.amount)');