MySQL: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column

group by有一个原则,就是select后面所有的列中,没有使用聚合函数的列,必须出现在group by子句中。

group by子句中的注意事项:

1,不能使用别名(因为执行顺序的原因)

2,除了函数字段,select子句中出现的所有字段都必须在group by中出现

only_full_group_by

MySQL 其实很早就添加了 only_full_group_by 这个 sql_mode,但一直都作为可选项之一,并没有强制默认。

然而,MySQL 5.7 之后,only_full_group_by 成为 sql_mode 的默认选项之一

这就会让我们的一些惯性思维导致一系列的 SQL 错误

only_full_group_by 这个 sql_mode 的唯一要求,就是所有的 select 字段必须在 group by 字段中,否则必须出现在 SQL Aggregate 函数中,反过来却是非必须的

补充:

有用的 Aggregate 函数:

  • AVG() - 返回平均值
  • COUNT() - 返回行数
  • FIRST() - 返回第一个记录的值
  • LAST() - 返回最后一个记录的值
  • MAX() - 返回最大值
  • MIN() - 返回最小值
  • SUM() - 返回总和

第一种解决方法:

  select
                product_id,any_value(shop_id),any_value(create_time),count(product_id) as total
       from
               tb_user_product
        where
               date_format(create_time,'%Y-%m-%d')=date_sub(curdate(),interval 1 day)
       group by
              product_id

 

第二种解决方法:

  select
                product_id,shop_id,create_time,count(product_id) as total
       from
               tb_user_product
        where
               date_format(create_time,'%Y-%m-%d')=date_sub(curdate(),interval 1 day)
       group by
             product_id,shop_id,create_time

posted @ 2020-07-30 14:53  xing柠檬  阅读(1048)  评论(0编辑  收藏  举报