我有table1
:
col1 (integer) | col2 (varchar[]) | col3 (integer)
----------------------------------------------------
1 | {A,B,C} | 2
1 | {A} | 5
1 | {A,B} | 1
2 | {A,B} | 2
2 | {A} | 3
2 | {B} | 1
我想总结一下' col3'与GROUP BY' col1'只保留' col3'
中的DISTINCT值预期结果如下:
col1 (integer) | col2 (varchar[]) | col3 (integer)
----------------------------------------------------
1 | {A,B,C} | 8
2 | {A,B} | 6
我试过了:
SELECT col1, array_to_string(array_accum(col2), ','::text),sum(col3) FROM table1 GROUP BY col1
但结果不是预期的结果:
col1 (integer) | col2 (varchar[]) | col3 (integer)
---------------------------------------------------------------
1 | {A,B,C,A,A,B} | 8
2 | {A,B,A,B} | 6
你有什么建议吗?
答案 0 :(得分:0)
如果您想要的col2
逻辑最大(如预期输出中{A,B,C}
& {A,B}
。
SELECT col1, (SELECT sub.col2
FROM table1 sub
INNER JOIN table1 sub ON MAX(char_length(sub.col2)) = col2
WHERE sub.col1 = col1)
SUM(col3)
FROM table1
GROUP BY col1
答案 1 :(得分:0)
SELECT
col1,
array_to_string(array_accum(col2), ','::text),
sum(col3)
FROM table1
GROUP BY col1;
但是array_to_string使用提供的分隔符和可选的空字符串连接数组元素。
您必须设计一个不同的策略,例如使用array_dims(anyarray)来选择具有max元素的数组,或者创建一个新的聚合函数。
为此你可能对这个答案感兴趣: