美文网首页
mysql分组问题

mysql分组问题

作者: 领带衬有黄金 | 来源:发表于2020-01-07 15:03 被阅读0次

    异常图片

    异常

    sql语句:

    select b.label_id,a.label_name,count(a.label_name) as count from quick_poll_label as a 
    left join quick_poll_alerts_label as b on a.id = b.label_id group by a.label_name;
    

    异常说明:

    解释一:

    对于group by聚合操作,如果在select中的列没有在group by中出现,那么这个SQL是不合法的,因为列不在group by从句中,所以设置了sql_mode=only_full_group_by 的数据库,在使用group by时就会报错。

    解释二:

    使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多的,所以去掉就好。

    官方解释:

    MySQL 5.7.5及更高版本实现了对功能依赖性的检测。如果ONLY_FULL_GROUP_BY启用了 SQL模式(默认情况下为SQL模式),则MySQL拒绝查询,其中选择列表,HAVING条件或 ORDER BY列表引用的是GROUP BY未在子句中命名且在功能上不依赖于它们的未聚合的列。(在5.7.5之前,MySQL不会检测功能依赖关系,并且 ONLY_FULL_GROUP_BY默认情况下未启用。

    相关链接

    修改方式:

    永久性修改在配置文件中修改

    windows系统在my.ini中修改,配置文件位置在服务中查看

    image.png

    修改-->

    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    linux系统在etc/my.cnf中

    在文件的最后加上

    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    不区分系统不修改配置,在没有参与group by的情况下,在字段上使用any_value(字段)函数,即可。

    select any_value(a.id),a.label_name,count(a.label_name) as count from quick_poll_label as a left join quick_poll_alerts_label as b on a.id = b.label_id group by a.label_name;
    

    相关文章

      网友评论

          本文标题:mysql分组问题

          本文链接:https://www.haomeiwen.com/subject/szvractx.html