MySQL中Group By使用总结

MySQL中Group By使用总结

报错情况

Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘a.text’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

SQL语句

SELECT a.value as label,
        a.text,
        COUNT(sn.ID) as value
        FROM (SELECT sdi.item_value AS "value",
        sdi.item_text AS "text",
        sdi.dict_id as dict_id
        FROM sys_dict_item AS sdi
        WHERE sdi.dict_id = (SELECT ab.id FROM sys_dict AS ab WHERE ab.dict_code = "abc")) AS a
        left JOIN szpt_notes as sn ON a.value = sn.note_second_type
        GROUP BY a.value

网上的解决方案

基本都是更改sql_mode,关闭only_full_group_by

1.查看sql_mode的开启情况

select @@session.sql_mode;
结果为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2.关闭only_full_group_by

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

但是数据库既然会对这个进行更新限制,那最好还是书写标准的SQL语句,更改数据库语句后的SQL:

SELECT a.value as label,
        a.text,
        COUNT(sn.ID) as value
        FROM (SELECT sdi.item_value AS "value",
        sdi.item_text AS "text",
        sdi.dict_id as dict_id
        FROM sys_dict_item AS sdi
        WHERE sdi.dict_id = (SELECT ab.id FROM sys_dict AS ab WHERE ab.dict_code = "abc")) AS a
        left JOIN szpt_notes as sn ON a.value = sn.type
        GROUP BY a.value,a.text

在group by里面加上a.text即可解决此问题,无需更改sql_mode。

猜你喜欢

转载自blog.csdn.net/qq_41941497/article/details/130010637