2017-12-12 3 views
1

에 정렬 나는 이런 식으로 값이 텍스트 컬럼과 PostgreSQL을의 테이블이 있습니다분할 문자열과 PostgreSQL

column 
----------- 
CA;TB;BA;CB 
XA;VA 
GA;BA;LA 

내가, 각각의 값에있는 요소를 정렬 할 있도록 쿼리 결과와 같은 이 :

column 
----------- 
BA;CA;CB;TB 
VA;XA 
BA;GA;LA 

나는 string_to_array, regexp_split_to_array, array_agg와 시도,하지만 난 가까운 그것을 얻을하지 않는 것.

감사합니다.

답변

0

나는이 이해하기 쉬울 것이다 희망 값을 행 (regexp_split_to_table)으로 나누고 정렬합니다. 그런 다음 group by 원래 값을 입력하고 string_agg (으)로 다시 가입하십시오.

출력 :

BA;CA;CB;TB 
BA;GA;LA 
VA;XA 
+0

감사합니다, 아주 좋은 대답은 매우 도움이 –

0

아마 그것과 복잡함을 해요 : 여기

t=# with a(c)as (values('CA;TB;BA;CB') 
,('XA;VA') 
,('GA;BA;LA')) 
, w as (select string_agg(v,';') over (partition by c order by v), row_number() over (partition by c),count(1) over(partition by c) from a,unnest(string_to_array(a.c,';')) v) 
select * from w where row_number = count; 
string_agg | row_number | count 
-------------+------------+------- 
BA;CA;CB;TB |   4 |  4 
BA;GA;LA |   3 |  3 
VA;XA  |   2 |  2 
(3 rows) 

과 약간의 추한 해킹 :

WITH tab AS (
    SELECT 
     * 
    FROM 
     unnest(ARRAY[ 
      'CA;TB;BA;CB', 
      'XA;VA', 
      'GA;BA;LA']) AS txt 
) 
SELECT 
    string_agg(val, ';') 
FROM (
    SELECT 
     txt, 
     regexp_split_to_table(txt, ';') AS val 
    FROM 
     tab 
    ORDER BY 
     val 
) AS sub 
GROUP BY 
    txt; 

첫째 :

with a(c)as (values 
('CA;TB;BA;CB') 
,('XA;VA') 
,('GA;BA;LA')) 
select translate(array_agg(v order by v)::text,',{}',';') from a, unnest(string_to_array(a.c,';')) v group by c; 
    translate 
------------- 
BA;CA;CB;TB 
BA;GA;LA 
VA;XA 
(3 rows)