复现报错
--咋们可以利用达梦数据库内置的员工表测试
select e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;
---------报错信息---------------
总共1个语句正依次执行...
[执行语句1]:
select e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;
执行失败(语句1)
-4080: 第1 行附近出现错误:
不是 GROUP BY 表达式
1条语句执行失败
1
2
3
4
5
6
7
8
9
10
11
12
13
3.2 解决办法1:
##达梦支持灵活的处理方式,可以直接在查询中加hint参数。
select /*+ GROUP_OPT_FLAG(1)*/ e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;
101 马学铭 72424
102 程擎武 21592
103 郑吉群 129443
104 陈仙 75945
105 金纬 194399
201 李慧军 45299
202 常鹏程 20491
204 谢俊人 81014
301 苏国华 112344
..............
1
2
3
4
5
6
7
8
9
10
11
12
13
3.3 解决办法2:
##也可以修改dm.ini参数GROUP_OPT_FLAG=1,动态,会话级参数,不用重启数据库。
select para_name,para_value,file_value from v$dm_ini where para_name='GROUP_OPT_FLAG';
##sp_set_para_value(1,'GROUP_OPT_FLAG',1);
select e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;
101 马学铭 72424
102 程擎武 21592
103 郑吉群 129443
104 陈仙 75945
105 金纬 194399
201 李慧军 45299
202 常鹏程 20491
204 谢俊人 81014
301 苏国华 112344
...............
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3.4 解决办法3:
达梦还可以配置兼容参数,COMPATIBLE_MODE=4,静态参数,需要重启数据库后生效!
sp_set_para_value(2,'COMPATIBLE_MODE',4);
select para_name,para_value,file_value from v$dm_ini where para_name='COMPATIBLE_MODE';
!!注意修改后需要重启数据库!!
select e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;
101 马学铭 72424
102 程擎武 21592
103 郑吉群 129443
104 陈仙 75945
105 金纬 194399
201 李慧军 45299
202 常鹏程 20491
204 谢俊人 81014
301 苏国华 112344
...............
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
COMPATIBLE_MODE参数解释:
0: 不兼容
1:兼容 SQL92 标准
2: 部分兼容 ORACLE
3: 部分兼容 MS SQL SERVER
4: 部分兼容 MYSQL
5:兼容 DM6
6: 部分兼容 TERADATA
1
2
3
4
5
6
7
8
4、GROUP BY注意事项
使用 GROUP BY 要注意以下问题:
1.在 GROUP BY 子句中的每一列必须明确地命名属于在 FROM 子句中命名的表的一列。分组列的数据类型不能是多媒体数据类型;
2.分组列不能为集函数表达式或者在 SELECT 子句中定义的别名;
3.当分组列值包含空值时,则空值作为一个独立组;
4.当分组列包含多个列名时,则按照 GROUP BY 子句中列出现的顺序进行分组;
5. GROUP BY 子句中至多可包含 255 个分组列; 6. ROLLUP\CUBE\GROUPING SETS 组合不能超过 9 个。
加入交流群
请使用微信扫一扫!