【发布时间】:2016-08-26 18:56:46
【问题描述】:
我已经在下表中尝试过,
SELECT DISTINCT
a.main_id,
array_agg(distinct a.secondary_id ) AS arr
FROM table1 a JOIN table1 b ON a.secondary_id = b.secondary_id or a.tertiary_id = b.tertiary_id
group by a.main_id, a.secondary_id , b.tertiary_id
我添加了 distinct 以省略重复但我无法将整行作为数组中的一个元素,根据下面提到的要求,它甚至没有将行放在数组中。我在关注this。
表格脚本:
Create table table1
(
id bigserial NOT NULL,
main_id integer NOT NULL,
secondary_id integer,
tertiary_id integer,
data1 text,
data2 text,
CONSTRAINT table1_pk PRIMARY KEY (main_id)
)
数据:
INSERT INTO table1(
main_id, secondary_id, tertiary_id, data1, data2)
VALUES (1,2,NULL,'data1_1_2_N','data2_1_2_N'),
(2,2,NULL,'data1_2_2_N','data2_2_2_N'),
(3,3,5,'data1_3_3_5','data2_3_3_5'),
(4,3,5,'data1_4_3_5','data2_4_3_5'),
(5,NULL,1,'data1_5_N_1','data2_5_N_1'),
(6,NULL,1,'data1_6_N_1','data2_6_N_1'),
(7,NULL,1,'data1_7_N_1','data2_7_N_1'),
(8,NULL,2,'data1_8_N_2','data2_8_N_2'),
(9,NULL,2,'data1_9_N_2','data2_9_N_2'),
(10,NULL,3,'data1_10_N_3','data2_10_N_3'),
(11,12,12,'data1_11_12_12','data2_11_12_12'),
(12,12,11,'data1_12_12_11','data2_12_12_11')
要求:
如果secondary_id 在两行或多行中相等,则应将它们视为一组,
否则,如果tertiary_id 相等,则可以将它们视为一组。
预期结果:
1 | {(1,2,NULL,'data1_1_2_N','data2_1_2_N'),(2,2,NULL,'data1_2_2_N','data2_2_2_N')}
2 | {(3,3,NULL,'data1_3_3_N','data2_3_3_N'),(4,3,NULL,'data1_4_3_N','data2_4_3_N')}
3 | {(5,NULL,1,'data1_5_N_1','data2_5_N_1'),(6,NULL,1,'data1_6_N_1','data2_6_N_1'),(7,NULL,1,'data1_7_N_1','data2_7_N_1')}
4 | {(8,NULL,2,'data1_8_N_2','data2_8_N_2'),(9,NULL,2,'data1_9_N_2','data2_9_N_2')}
5 | {(10,NULL,3,'data1_10_N_3','data2_10_N_3')}
6 | {(11,12,12,'data1_11_12_12','data2_11_12_12'),(12,12,11,'data1_12_12_11','data2_12_12_11') }
版本“PostgreSQL 9.3.11”
【问题讨论】:
-
从
select中删除DISTINCT a.main_id,,从group by中删除a.main_id,,将array_agg(distinct a.secondary_id)更改为array_agg(distinct a.*)- 然后你会得到你想要的东西。 -
@Abelisto 您的查询工作正常,除了一种情况.. 当
secondary_id和tertiary_id都出现相同的 id 时。例如:main_id 11 和 12 重复。其他都很好 -
@MarlonAbeykoon 为什么您的预期输出中没有 main_id 11 和 12?
-
是的,我编辑并更正了
标签: arrays postgresql postgresql-9.3