sql标准不允许出现select列不在在group by列里,但是mysql老版本允许。
kingbase mysql模式下的数据库提供了参数可以配置是否兼容该特性

group by sql执行报错现象

test=# select relnamespace::regnamespace,relkind,count(*) from sys_class group by relkind;
ERROR:  column "sys_class.relnamespace" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select relnamespace::regnamespace,relkind,count(*) from sys_...

确认数据库模式

test=# show database_mode ;
 database_mode
---------------
 mysql
(1 row)

确认数据库参数

test=# show sql_mode ;
            sql_mode
--------------------------------
 ONLY_FULL_GROUP_BY,ANSI_QUOTES
(1 row)

调整参数解决

1.会话级设置

test=# set sql_mode='ANSI_QUOTES';
SET
test=# select relnamespace::regnamespace,relkind,count(*) from sys_class group by relkind;
 relnamespace | relkind | count
--------------+---------+-------
 pg_catalog   | r       |   118
 pg_catalog   | v       |   443
 pg_toast     | i       |   233
 pg_toast     | t       |    49
 sysmac       | S       |     3

2.全局设置

test=# show sql_mode ;
            sql_mode
--------------------------------
 ONLY_FULL_GROUP_BY,ANSI_QUOTES
(1 row)

test=# alter system set sql_mode='ANSI_QUOTES';
ALTER SYSTEM
test=# select sys_reload_conf();
 sys_reload_conf
-----------------
 t
(1 row)

test=# show sql_mode ;
  sql_mode
-------------
 ANSI_QUOTES
(1 row)

test=# select relnamespace::regnamespace,relkind,count(*) from sys_class group by relkind;
 relnamespace | relkind | count
--------------+---------+-------
 pg_catalog   | r       |   118
 pg_catalog   | v       |   443
 pg_toast     | i       |   233
 pg_toast     | t       |    49
 sysmac       | S       |     3
(5 rows)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐