我有一张类似下一张的表:
dt[, (2:ncol(dt)) := .SD*1/sqrt(Reduce(`+`, .SD)), .SDcols = -1]
如何获取 TABLE 1
-------
ID Integer
COLUMN_1 Text
COLUMN_2 Text
COLUMN_3 Integer
,COLUMN_1
和COLUMN_2
组合在同一列中重复出现的ID?
我计算重复分组的列如下:
COLUMN_3
但我正在寻找的是如何获得Ids。
所以,如果我有下一个数据:
select column_1, column_2, column_3, count(*) from table_ 1 group by icolumn_1, column_2, column_3;
我正在寻找下一个结果:
ID | COLUMN_1 | COLUMN_2 | COLUMN_3
1 | BLUE | FISH | SEA
2 | BLUE | FISH | SEA
3 | BLUE | FISH | RIVER
答案 0 :(得分:1)
可以使用聚合函数string_agg(expression, delimiter)来完成。 还有一个类似的问题here。它有一个例子的答案。
答案 1 :(得分:1)
在您的特定情况下,以下查询应该执行您想要的操作:
SELECT string_agg(id::varchar, ', ') AS "IDs Repeated",
column_1, column_2, column_3, COUNT(*)
FROM p
GROUP BY column_1, column_2, column_3;
(我更正了我认为结果列名称中的拼写错误)。
但是,结果不是第一范式。您可能对以下查询感兴趣:
SELECT id, column_1, column_2, column_3, COUNT(*) OVER (PARTITION BY column_1, column_2, column_3)
FROM p;
id | column_1 | column_2 | column_3 | count
----+----------+----------+----------+-------
3 | BLUE | FISH | RIVER | 1
1 | BLUE | FISH | SEA | 2
2 | BLUE | FISH | SEA | 2
(3 rows)
答案 2 :(得分:1)
检查这个。
SELECT array_to_string(array_agg(id), ',') as "IDs Repetead",
COLUMN_1,COLUMN_2, COLUMN_3,count(id) as "COUNT"
FROM temp
GROUP BY COLUMN_1,COLUMN_3,COLUMN_2
order by "IDs Repetead"