簡體   English   中英

在數組列上查找重復的值

[英]Find duplicated values on array column

我有一個帶有數組列的表,如下所示:

my_table
id   array
--   -----------
1    {1, 3, 4, 5}
2    {19,2, 4, 9}
3    {23,46, 87, 6}
4    {199,24, 93, 6}

結果我想要重復的值在哪里,像這樣:

value_repeated    is_repeated_on
--------------    -----------
4                 {1,2}
6                 {3,4}

可能嗎? 我不知道該怎么做。 我不怎么開始! 我迷路了!

使用unnest將數組轉換為行,然后使用array_aggid構建數組

它看起來應該像這樣:

SELECT v AS value_repeated,array_agg(id) AS is_repeated_on FROM 
(select id,unnest(array) as v from my_table) 
GROUP by v HAVING Count(Distinct id) > 1

請注意, HAVING Count(Distinct id) > 1表示過濾的值即使一次也不會出現

調用unnest()這樣的set-returning函數的簡單方法是在LATERAL ,自Postgres 9.3起可用:

SELECT value_repeated, array_agg(id) AS is_repeated_on
FROM   my_table
     , unnest(array_col) value_repeated
GROUP  BY value_repeated
HAVING count(*) > 1
ORDER  BY value_repeated;  -- optional

關於LATERAL

您的問題中沒有什么可以排除快捷方式重復項(同一數組中同一元素不止一次( 如I @ MSoP注釋 ),因此它必須是count(*) ,而不是count (DISTINCT id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM