mysql - 查询,联接和求和问题,返回错误

标签 mysql laravel datatable yajra-datatable

尝试加载数据表时,我的代码有问题,我在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:\n\nSQLSTATE[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”将不起作用。

这些字段是在子查询中构建的,因此它们实际上并未聚合。

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'),          


尝试改用orderBy。

您可以像这样雄辩地进行一笔或一轮回合:

 ... ->sum('field');


但我不相信您可以雄辩地进行数学和四舍五入。如果确实需要模型进行汇总,则最好将查询设置为数据库中的视图。

关于mysql - 查询,联接和求和问题,返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59075456/

相关文章:

laravel - 动态回调 url laravel

laravel - 带 Lumen 的 NotFoundHttpException

php - Laravel 5.3 将数据传递到密码重置模板失败

mysql - 选择第n行某key SQL

php - SQL 如何将多个表中的数据插入和选择到单个表中并使用不同的列?

jquery - 无法设置 jquery 的数据表插件 10.1 的数据表宽度

html - JSF h :dataTable creates single empty cell when no records

javascript - 使用多维数组创建表 - 错误 : Cannot set property of undefined

php - mysql/php - 确定数据来自哪里

php - 哪种方式加载MySQL数据库比较好?