PostgreSQL 中數組去重的方法


數組是 PostgreSQL 中一個很好用的數據類型,但官方並未提供類似於 array_distinct 之類的數組去重函數,我們可以通過以下操作來實現該功能:

  1. 使用 unnest() 將數組轉換為一組數據行
  2. 使用 DISTINCT 移除重復項
  3. 使用 ARRAY(query) 將行再轉為數組
ARRAY( SELECT DISTINCT ... FROM unnest(arr) )

一個可運行的 SQL 語句如下:

SELECT ARRAY(SELECT DISTINCT e FROM unnest(ARRAY[a,b,c,d]) AS a(e))
FROM ( VALUES
('foo', 'bar', 'foo', 'baz' )
) AS t(a,b,c,d);

以下代碼會創建一個名為 array_distinct 自定義函數: 

CREATE OR REPLACE FUNCTION "public"."array_distinct"(anyarray)
RETURNS "pg_catalog"."anyarray" AS $BODY$
SELECT ARRAY(SELECT DISTINCT unnest($1));
$BODY$
LANGUAGE sql VOLATILE
COST 100

調用示例如下:

SELECT array_distinct ( ARRAY [ 'A', 'B', 'C', '1', 'A' ]:: VARCHAR [] )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM