2017-11-22 11 views
1

나는 모든 커플 (2-uplets)을 찾는 알고리즘의 이름 (및 코드 : PL/SQL 또는 PG/SQL에서)을 찾고 있습니다. 세트.집합의 모든 2-uplet에 대한 알고리즘 이름

예 : A - B - C 결과 : 1 : A - B 2 : A - C 3 : B - C

나는 파워 셋 알고리즘이 작업의이 부분을 할 것을 알고, 하지만 최적화 된 커플 파인더 알고리즘을 찾고 있습니다. 파워 셋의 페이지/SQL 알고리즘

링크 : https://www.postgresql.org/message-id/20060924054759.GA71934%40winnie.fuhr.org

+1

'튜플 (tuplets)'이라고하고 '조합'을 찾고 싶습니다. –

+0

@SaniSinghHuttunen "튜플"은 음악 용어입니다. OP가 말하는 것은 ['pair'] (https://en.wikipedia.org/wiki/Tuple)입니다. – Blake

+0

알림을받지 못한 경우에 대비하여 내 대답에 덧글을 추가했습니다. – Patrick87

답변

-1

내가 솔루션 구축했습니다 :

CREATE OR REPLACE FUNCTION twouplets(a anyarray) 
    RETURNS SETOF anyarray AS 
$BODY$ 
DECLARE 
    retval a%TYPE; 
    size integer := array_upper(a, 1); 
    i  integer; 
    j  integer; 
BEGIN 
    i := 0; 
    j := 1; 

    FOR i IN 1 .. size LOOP 
    FOR j IN 1 .. size-i LOOP 
    retval := '{}'; 
       retval := array_append(retval, a[i]); 
       retval := array_append(retval, a[i+j]); 
       RETURN NEXT retval; 
    END LOOP; 
    END LOOP; 

    RETURN; 

END; 
$BODY$ 
    LANGUAGE plpgsql IMMUTABLE STRICT 
    COST 100 
    ROWS 1000; 
ALTER FUNCTION twouplets(anyarray) 
    OWNER TO postgres; 
1

당신이

Select A.x, B.x 
From YourTable as A, YourTable as B 
Where A.key <> B.key 

같은 생각이 있으 당신은 너무이 수도 SQL 언급 바람직 할 것이다. 교차 제품의 행 수는 쌍 수와 거의 같기 때문에 비효율적이지 않습니다.

+0

데이터 테이블에 키가 없습니다. 테이블은 다음과 같습니다 : order | 제품 (기본 키가없고 고유 값 (주문 및 제품)이 없음) –

+0

{A, B} => 건물 : {A-B}, {B-A}의 경우이 솔루션은 이중 커플을 생성하기 때문에 작동하지 않습니다. 결과적으로 {A-B} –

+0

@QuentinT가 필요합니다. 쌍으로 넣는 데이터가 총 순서 (즉,> 또는 <를 정의 할 수있는 것) 일 경우 where 節를 변경하여 언급 한 문제를 해결할 수 있습니다. 첫 번째 요소는 두 번째 요소보다 엄격하게 작습니다. 이 총 주문은 '자연스러운'주문 일 필요는 없습니다. 질서는 할 것이고, 대부분의 내장 된 유형은 그들이 넣을 수있는 순서가 있습니다. – Patrick87