msyql 8.0.23 GROUP BY 后查询属性报错

文章讲述了在MySQL中遇到分组过后的属性查询错误,原因是8.x版本的only_full_group_by设置要求。解决方法是使用any_value()函数包裹查询属性,并解释了any_value()的工作原理和注意事项。any_value是非标准SQL但在MySQL5.7及以上版本可用。
摘要由CSDN通过智能技术生成

分组过后的属性查询报错

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

错误原因

原因是mySql的8.几的某个版本 only_full_group_by设置又更改,所以GROUP BY要符合only_full_group_by的设置。

解决方法

在要查询的每个属性用 any_value()进行包裹

// 这是错误的查询
SELECT id,type_id FROM wdf_monitor_type_item GROUP BY type_id 
// 这是修改后的查询
SELECT any_value(id),any_value(type_id) FROM wdf_monitor_type_item GROUP BY type_id

any_value() 函数的解析

1,any_value()函数在SQL中的作用主要是用于在分组查询中为每个组选择一个值;

2,其工作原理是,当在分组查询中,并不关心具体选择哪个值,而只需要为每个组选择一个值时,可以使用any_value()函数。它返回的值是随机的,不保证总是返回相同的值,因此被称为“非确定性”的。如果组内所有的值都是NULL,any_value()函数会返回NULL。此外,它也不保证返回值的唯一性,有可能返回重复的值2。

3,需要注意的是,any_value()函数并非标准SQL的一部分,是MySQL的扩展功能。因此,在使用时需要考虑数据库系统的兼容性。这个函数是5.7版本开始引入到MySQL中的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值