簡體   English   中英

Postgres GROUP BY數組列

[英]Postgres GROUP BY Array Column

我使用postgres並有一個像這樣的表:

id   | arr
-------------------
 1   | [A,B,C]
 2   | [C,B,A]
 3   | [A,A,B]
 4   | [B,A,B]

我創建了一個GROUP BY'arr'查詢。

SELECT COUNT(*) AS total, "arr" FROM "table" GROUP BY "arr"

...以及結果:

total | arr
-------------------
 1    | [A,B,C]
 1    | [C,B,A]
 1    | [A,A,B]
 1    | [B,A,B]

但是,由於[A,B,C]和[C,B,A]具有相同的元素,所以我希望結果應該像這樣:

total | arr
-------------------
  2   |   [A,B,C]
  2   |   [A,A,B]

我是否想念(查詢中)的東西? 請幫我..

您無需創建單獨的函數即可執行此操作。 所有這些都可以在一個語句中完成:

select array(select unnest(arr) order by 1) as sorted_arr, count(*)
from t
group by sorted_arr;

這是一個學期

[A,B,C]和[C,B,A]是不同的數組,即使它們具有相同的元素但它們不在同一位置,它們也永遠不會由group by子句分組,以防您想要它們等效,您需要先對其進行排序。

此線程上,您有信息顯示排序數組。

您應該執行以下操作:

SELECT COUNT(*) AS total, array_sort("arr") FROM "table" GROUP BY array_sort("arr")

在創建了一個排序函數之后,提出了一個排序函數:

CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
RETURNS ANYARRAY LANGUAGE SQL
AS $$
SELECT ARRAY(SELECT unnest($1) ORDER BY 1)
$$;

暫無
暫無

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

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