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

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐