语法错误或访问冲突:1140 GROUP列的混合(MIN(),MAX(),COUNT(),...)

问题描述 投票:0回答:1

SQL错误

SQLSTATE [42000]:语法错误或访问冲突:1140混合使用没有GROUP列的GROUP列(MIN(),MAX(),COUNT()等)是如果没有GROUP BY子句则为非法(SQL:SELECTsum(vehicles.total_amount)作为TotalAmount,COALESCE(CONCAT(payment_mode.payment_name,'(',ROUND(SUM(vehicles.total_amount)* 100 / Total.TotalAmount,2),'%)'),0)为从vehicles左外的百分比加入paying_mode ONpayment_mode.id = cars.pay_mode_id左外联接(选择SUM(vehicles.total_amount)作为TotalAmount,来自车辆的标志)为总计ON Total.flag = vehicles.flag Where车辆.created_at>'2020-03-25 00:01:01'和Vehicles.created_at

SQL查询

SELECT sum(vehicles.total_amount) as TotalAmount,
        COALESCE(CONCAT(payment_mode.payment_name, '(', ROUND( SUM(vehicles.total_amount)*100/Total.TotalAmount, 2),'%)'),0) as Percent
FROM `vehicles`
LEFT OUTER join payment_mode ON payment_mode.id = vehicles.pay_mode_id
LEFT OUTER JOIN (SELECT SUM(vehicles.total_amount) as TotalAmount, flag from vehicles) as Total ON Total.flag=vehicles.flag
WHERE vehicles.created_at > '$today' and vehicles.created_at < '$todays'
GROUP BY vehicles.pay_mode_id

这是我的代码,即使该代码在MySQL上也能正常工作,但是当我将其放入Laravel时,它显示出错误。

php mysql laravel
1个回答
0
投票

最新MYSQL,您必须将select中的所有列都用作GroupBy

此外,当您使用MIN(),MAX(),COUNT() AVG()等聚合函数时,也必须使用GroupBy

您可以在config/database.php中关闭严格模式来解决此问题:

 'mysql' => [
            'strict' => false,
        ],

之后,您也可以在单列上使用GroupBy


0
投票

您的子查询(SELECT SUM(vehicles.total_amount) as TotalAmount, flag from vehicles) as Total错误-向其中添加GROUP BY flag

SELECT sum(vehicles.total_amount) as TotalAmount,
        COALESCE(CONCAT(payment_mode.payment_name, '(', ROUND( SUM(vehicles.total_amount)*100/Total.TotalAmount, 2),'%)'),0) as Percent
FROM `vehicles`
LEFT OUTER join payment_mode ON payment_mode.id = vehicles.pay_mode_id
LEFT OUTER JOIN ( SELECT SUM(vehicles.total_amount) as TotalAmount, flag 
                  from vehicles
                  GROUP BY flag ) as Total ON Total.flag=vehicles.flag
WHERE vehicles.created_at > '$today' and vehicles.created_at < '$todays'
GROUP BY vehicles.pay_mode_id
© www.soinside.com 2019 - 2024. All rights reserved.