原创

达梦数据库执行报错 -4080: 第1 行附近出现错误:不是 GROUP BY 表达式

报错提示如下:

解决不是 GROUP BY 表达式问题有以下三种:

1、直接在查询中添加参数: /*+ GROUP_OPT_FLAG(1)*/
例如:select /*+ GROUP_OPT_FLAG(1)*/ e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;

2、修改dm.ini参数GROUP_OPT_FLAG=1,GROUP_OPT_FLAG属于动态,会话级参数,不用重启数据库就可以生效。
设置参数 GROUP_OPT_FLAG=1 语句:
sp_set_para_value(1,'GROUP_OPT_FLAG',1);
再查看GROUP_OPT_FLAG配置参数是否成功:
select para_name,para_value,file_value from v$dm_ini where para_name='GROUP_OPT_FLAG';

3、配置兼容参数COMPATIBLE_MODE=4,COMPATIBLE_MODE属于静态参数,需要重启数据库后生效!
设置参数 COMPATIBLE_MODE=4 语句:
sp_set_para_value(2,'COMPATIBLE_MODE',4);
再查看GROUP_OPT_FLAG配置参数是否成功:
select para_name,para_value,file_value from v$dm_ini where para_name='COMPATIBLE_MODE';

COMPATIBLE_MODE参数解释:
0: 不兼容
1:兼容 SQL92 标准
2: 部分兼容 ORACLE
3: 部分兼容 MS SQL SERVER
4: 部分兼容 MYSQL
5:兼容 DM6
6: 部分兼容 TERADATA

特别提醒:
达梦数据库使用 GROUP BY 分组要注意以下问题:

1.在 GROUP BY 子句中的每一列必须明确地命名属于在 FROM 子句中命名的表的一列,分组列的数据类型不能是多媒体数据类型;
2.分组列不能为集函数表达式或者在 SELECT 子句中定义的别名;
3.当分组列值包含空值时,则空值作为一个独立组;
4.当分组列包含多个列名时,则按照 GROUP BY 子句中列出现的顺序进行分组;
5. GROUP BY 子句中至多可包含 255 个分组列;
6. ROLLUP\CUBE\GROUPING SETS 组合不能超过 9 个。

本文链接地址:http://www.ysxbohui.com/article/314

正文到此结束