关于查询,联接和求和的问题,给我返回错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于查询,联接和求和的问题,给我返回错误相关的知识,希望对你有一定的参考价值。

尝试加载数据表时我的代码有问题,我在Laravel 5.5中使用Yajra数据表

这是我的用于加载数据表的代码

public function getTotalMes(){
       return datatables()
        ->eloquent(Copropietario::select('copropietario') 
            ->join('clientes', 'clientes.id', '=', 'copropietario.cliente_id' )
            ->join('egresos', 'egresos.cliente_id', '=', 'clientes.id' )
            ->join('morosos', 'morosos.copropietario_id', '=', 'copropietario.numerodepto' )
            ->join('medidor', 'medidor.nummedidor', '=', 'copropietario.numerodepto')
            ->join('calderas', 'calderas.nummedidor', '=', 'copropietario.numerodepto')
            ->select('copropietario.id',
                    'copropietario.numerodepto', 
                    'egresos.mescobro', 
                    'egresos.aniocobro', 
                    DB::raw('SUM(egresos.montopago) as suma_total'),
                    DB::raw('ROUND( (SUM( egresos.montopago ) * ( copropietario.alicuotatotal ))) as gasto_comun'),
                    DB::raw('ROUND( (((SUM( egresos.montopago ) * ( copropietario.alicuotatotal)))) * (0,05)) as fondo_reserva'),                     
                    'copropietario.cliente_id', 
                    'medidor.totalmes as medidor', 
                    'calderas.totalmes as caldera', 
                    'morosos.totalmoroso as deuda_anterior', 
                    'copropietario.alicuotatotal')
            ->where('egresos.mescobro', '=', 'Octubre')
            ->where('medidor.fechamedicion', '=', '2019-10-30')
            ->where('egresos.conceptopago', '<>', 'Caldera Condominio')
            ->where('egresos.aniocobro', '=', '2019')
            ->groupBy('copropietario.numerodepto'))
            ->toJson();
    }

并向我返回此错误

{
"draw": 0,
"recordsTotal": 0,
"recordsFiltered": 0,
"data": [],
"error": "Exception Message:

SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) (SQL: select count(*) as aggregate from (select `copropietario`.`id`, `copropietario`.`numerodepto`, `egresos`.`mescobro`, `egresos`.`aniocobro`, SUM(egresos.montopago) as suma_total, ROUND( (SUM( egresos.montopago ) * ( copropietario.alicuotatotal ))) as gasto_comun, ROUND( (((SUM( egresos.montopago ) * ( copropietario.alicuotatotal)))) * (0,05)) as fondo_reserva, `copropietario`.`cliente_id`, `medidor`.`totalmes` as `medidor`, `calderas`.`totalmes` as `caldera`, `morosos`.`totalmoroso` as `deuda_anterior`, `copropietario`.`alicuotatotal` from `copropietario` inner join `clientes` on `clientes`.`id` = `copropietario`.`cliente_id` inner join `egresos` on `egresos`.`cliente_id` = `clientes`.`id` inner join `morosos` on `morosos`.`copropietario_id` = `copropietario`.`numerodepto` inner join `medidor` on `medidor`.`nummedidor` = `copropietario`.`numerodepto` inner join `calderas` on `calderas`.`nummedidor` = `copropietario`.`numerodepto` where `egresos`.`mescobro` = Octubre and `medidor`.`fechamedicion` = 2019-10-30 and `egresos`.`conceptopago` <> Caldera Condominio and `egresos`.`aniocobro` = 2019 group by `copropietario`.`numerodepto`) count_row_table)"
}

enter image description here

答案
这里的问题是您正在子查询中进行汇总(求和与舍入)。效果是“ groupby”将不起作用。

以上是关于关于查询,联接和求和的问题,给我返回错误的主要内容,如果未能解决你的问题,请参考以下文章

执行动态 PL/SQL 块以执行求和并返回值

有没有办法改进这个查询

3.09 聚集和联接

片段视图返回后执行的 Firebase 查询

我的查询中的内部联接似乎无法识别

如何在 SQL 中对多列求和