如何在重复多列的列中获取ID
How to fetch the ids in a column where multiple columns are repeated
我有一个 table 像下一个:
TABLE 1
-------
ID Integer
COLUMN_1 Text
COLUMN_2 Text
COLUMN_3 Integer
如何获取在同一列中重复 COLUMN_1
、 COLUMN_2
和 COLUMN_3
组合的 ID?
我计算了重复分组的列,如下所示:
select column_1, column_2, column_3, count(*) from table_ 1 group by icolumn_1, column_2, column_3;
但我正在寻找的是如何同时获取 ID。
例子
所以如果我有下一个数据:
ID | COLUMN_1 | COLUMN_2 | COLUMN_3
1 | BLUE | FISH | SEA
2 | BLUE | FISH | SEA
3 | BLUE | FISH | RIVER
我正在寻找如下结果:
IDs Repeated | COLUMN_1 | COLUMN_2 | COLUMN_3 | COUNT
1, 2 | BLUE | FISH | SEA | 2
3 | BLUE | FISH | RIVER | 1
可以用聚合函数来完成string_agg(expression, delimiter)。
有一个类似的问题here。它有一个例子的答案。
在您的特定情况下,以下查询应该可以满足您的要求:
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)
检查这个。
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"
我有一个 table 像下一个:
TABLE 1
-------
ID Integer
COLUMN_1 Text
COLUMN_2 Text
COLUMN_3 Integer
如何获取在同一列中重复 COLUMN_1
、 COLUMN_2
和 COLUMN_3
组合的 ID?
我计算了重复分组的列,如下所示:
select column_1, column_2, column_3, count(*) from table_ 1 group by icolumn_1, column_2, column_3;
但我正在寻找的是如何同时获取 ID。
例子
所以如果我有下一个数据:
ID | COLUMN_1 | COLUMN_2 | COLUMN_3
1 | BLUE | FISH | SEA
2 | BLUE | FISH | SEA
3 | BLUE | FISH | RIVER
我正在寻找如下结果:
IDs Repeated | COLUMN_1 | COLUMN_2 | COLUMN_3 | COUNT
1, 2 | BLUE | FISH | SEA | 2
3 | BLUE | FISH | RIVER | 1
可以用聚合函数来完成string_agg(expression, delimiter)。 有一个类似的问题here。它有一个例子的答案。
在您的特定情况下,以下查询应该可以满足您的要求:
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)
检查这个。
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"