118 votes

éliminer les valeurs de tableau en double dans les postgres

J'ai un tableau de type bigint, comment puis-je supprimer les valeurs dupliquées dans ce tableau ?

Ex : array[1234, 5343, 6353, 1234, 1234]

Je devrais obtenir array[1234, 5343, 6353, ...]

J'ai testé l'exemple SELECT uniq(sort('{1,2,3,2,1}'::int[])) dans le manuel postgres mais il ne fonctionne pas.

141voto

Mikhail Lisakov Points 1170

J'ai fait face à la même chose. Mais un tableau dans mon cas est créé via la fonction array_agg. Et heureusement, il permet d'agréger des valeurs DISTINCTES, comme :

  array_agg(DISTINCT value)

Ça marche pour moi.

17voto

tbussmann Points 414

L'utilisation DISTINCT trie implicitement le tableau. Si l'ordre relatif des éléments du tableau doit être préservé tout en supprimant les doublons, la fonction peut être conçue comme suit : (devrait fonctionner à partir de 9.4)

CREATE OR REPLACE FUNCTION array_uniq_stable(anyarray) RETURNS anyarray AS
$body$
SELECT
    array_agg(distinct_value ORDER BY first_index)
FROM 
    (SELECT
        value AS distinct_value, 
        min(index) AS first_index 
    FROM 
        unnest($1) WITH ORDINALITY AS input(value, index)
    GROUP BY
        value
    ) AS unique_input
;
$body$
LANGUAGE 'sql' IMMUTABLE STRICT;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X