ITPub博客

首页 > 数据库 > PostgreSQL > PostgreSQL string_to_array group by 两个列报错

PostgreSQL string_to_array group by 两个列报错

原创 PostgreSQL 作者:哎呀我的天呐 时间:2022-10-19 11:41:59 0 删除 编辑

现象是这样的,生产环境和测试环境数据相同,执行相同的SQL,生产报错,测试环境没有报错,

原因其实是表结构不用,生产环境没有主键,模拟复现如下:

生产环境

create table test(id int,name varchar(100));
insert into test values (1,'a,b');
insert into test values (2,'c,d,e');
select 
  id,
  (string_to_array(name, ',')) as name1
from 
  test e
group by id; 
oss_ods@oss_ods-> group by id; 
ERROR:  column "e.name" must appear in the GROUP BY clause or be used in an aggregate function
LINE 3:   (string_to_array(name, ',')) as name1
oss_ods@oss_ods=> select 
oss_ods@oss_ods->   id,
oss_ods@oss_ods->   (string_to_array(name, ',')) as name1
oss_ods@oss_ods-> from 
oss_ods@oss_ods->   test e
oss_ods@oss_ods-> group by id,name; 
 id |  name1  
----+---------
  1 | {a,b}
  2 | {c,d,e}
(2 rows)

测试环境

drop table test;
create table test(id int,name varchar(100),constraint test_pk primary key(id));
insert into test values (1,'a,b');
insert into test values (2,'c,d,e');
oss_ods@oss_ods=> select 
oss_ods@oss_ods->   id,
oss_ods@oss_ods->   (string_to_array(name, ',')) as name1
oss_ods@oss_ods-> from 
oss_ods@oss_ods->   test e
oss_ods@oss_ods-> group by id,name; 
 id |  name1  
----+---------
  1 | {a,b}
  2 | {c,d,e}
(2 rows)
oss_ods@oss_ods=> 
oss_ods@oss_ods=> select 
oss_ods@oss_ods->   id,
oss_ods@oss_ods->   (string_to_array(name, ',')) as name1
oss_ods@oss_ods-> from 
oss_ods@oss_ods->   test e
oss_ods@oss_ods-> group by id; 
 id |  name1  
----+---------
  2 | {c,d,e}
  1 | {a,b}
(2 rows)



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29990276/viewspace-2919141/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
https://cloud.tencent.com/developer/inventory/14362

注册时间:2014-10-30

  • 博文量
    403
  • 访问量
    2528733