mysql 关于 group by 的查询和报错

group by 和 order by 一起使用时,会先使用group by 分组,并取出分组后的第一条数据,所以后面的order by 排序时根据取出来的第一条数据来排序的,但是第一条数据不一定是分组里面的最大数据。

只有指定字段获取到最大值

SELECT id, max(operat_time) FROM tb GROUP BY id;

只有指定字段获取到最小值

SELECT id, min(operat_time) FROM tb GROUP BY id;

还可以先排序,再分组,再排序:使用子查询。

      SELECT * FROM (
      SELECT  t.*   ORDER BY t.dev_time DESC 
        LIMIT 10000
        )o
        GROUP BY assetId

注意 5.7版本要在子查询中加 limit10000000

放到生产环境,报错:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'o.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
 

原因:

mysql5.7以上默认开启了only_full_group_by 模式

1、进入mysql命令,查看sql_mode

SELECT @@sql_mode;

如图

mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@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 |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

先关闭mysql

  service mysql stop

linux 进入 /etc ,修改 my.cnf

在[mysqld]下增加

sql_mode=NO_UNSIGNED_SUBTRACTION,NO_ENGINE_SUBSTITUTION

vi my.cnf  打开 my.cnf

按住shift输入“:”,使文件变成可查询状态;

输入 “/” + 要修改的内容,回车 (例如:要修改服务器地址和端口号);

定位到要修改的位置后按 键变成可编辑状态,对要修改的内容进行修改

ESC键,退出修改状态

按住shift输入“:”,使文件变成可查询状态

输入 wq!回车,保存修改;输入 q!,不保存修改;

启动mysql

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 当使用group by进行分组查询时,如果group by后的字段与select后查询的字段不一致,就会信息如下:#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by。\[1\]这个误在达梦数据库中也存在。解决这个问题有几种方法。一种是补全group by后的字段,但这种方法不推荐,因为如果要查询的字段很多且内容不能保证不重复,补全所有字段会导致查询数据丢失。另一种方法是修改配置,可以使用navicat管理工具连接mysql数据库,然后在命令界面中输入以下语句来修改配置:select @@global.sql_mode; set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';\[3\]这样就可以解决group by查询数据库的问题了。 #### 引用[.reference_title] - *1* *3* [高版本Mysql使用group by 分组](https://blog.csdn.net/qq_43486404/article/details/126744365)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [达梦数据库SQL查询不是 GROUP BY 表达式解决方法](https://blog.csdn.net/qq_37898570/article/details/126951104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值