如何在重复多列的列中获取ID

时间:2017-01-13 12:06:32

标签: sql postgresql count postgresql-9.4

我有一张类似下一张的表:

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_1COLUMN_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

3 个答案:

答案 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"