我正试图找到一种方法来使用Perl来进一步处理PostgreSQL输出。如果有更好的方法通过PostgreSQL做到这一点,请告诉我。我基本上需要在文件中选择某些列(Realtime,Value)来连接某些列以创建一行,同时保留ID和CAT。
第一次发帖,所以如果我错过任何内容,请告诉我。
输入:
ID CAT Realtime Value
A 1 time1 55
A 1 time2 57
B 1 time3 75
C 2 time4 60
C 3 time5 66
C 3 time6 67
输出:
ID CAT Time Values
A 1 time 1,time2 55,57
B 1 time3 75
C 2 time4 60
C 3 time5,time6 66,67
答案 0 :(得分:2)
你可以在Postgres中最简单地做到这一点(使用数组列)
CREATE TEMP TABLE output AS SELECT
id, cat, ARRAY_AGG(realtime) as time, ARRAY_AGG(value) as values
FROM input GROUP BY id, cat;
然后从输出表中选择您想要的任何内容。
答案 1 :(得分:2)
SELECT id
, cat
, string_agg(realtime, ',') AS realtimes
, string_agg(value, ',') AS values
FROM input
GROUP BY 1, 2
ORDER BY 1, 2;
string_agg()
需要PostgreSQL 9.0或更高版本,并将所有值连接到分隔符分隔的字符串 - 而array_agg()
(v8.4 +)从输入值中创建am数组。
关于 1, 2
- 我在SELECT
命令上引用手册:
表达式可以是输入列名称,也可以是名称或序号 输出列(SELECT列表项)或...
每个表达式可以是输出列的名称或序号 (选择列表项)或
强调我的。所以这只是符号方便。特别方便的是SELECT
列表中的复杂表达式。