이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.4rowRowRowRow2 ~ 토토 핫 ~ Row6 ~ Row5 ~ Row9 ~ row5 ~ row9 ~ 토토 핫 ~ row6 ~ row8_RowRowRowRowRow2 ~ 토토 핫 ~ Row6 ~ Row5 ~ Row9 ~ row5 ~ row9 ~ 토토 핫 ~ Row6 ~ 토토 핫57버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

F.35. 테이블기능

테이블 기능모듈에는 다음이 포함됩니다. 테이블(즉, 여러 행)을 반환하는 다양한 함수입니다. 이러한 기능은 그 자체로나 다음과 같은 용도로 유용합니다. 여러 값을 반환하는 C 함수를 작성하는 방법의 예 행.

F.35.1. 제공되는 기능

표 F-30다음에서 제공하는 기능을 보여줍니다.테이블 기능모듈.

표 F-30.테이블 기능기능

기능 반환 설명
normal_rand(int numvals, float8 평균, float8 stddev) setof float8 정규분포된 무작위 집합을 생성합니다. 값
크로스탭(스포츠 토토 결과 SQL) 레코드 세트 생성"피벗 테이블"행 이름 + 포함N값 열, 여기서N행 유형에 따라 결정됩니다. 호출 쿼리에 지정됨
크로스탭N(스포츠 토토 결과 SQL) setof table_crosstab_N 생성"피벗 테이블"행 이름 + 포함N값 열.크로스탭2, 크로스탭3크로스탭4미리 정의되어 있지만 다음을 수행할 수 있습니다. 추가 생성크로스탭N설명된 대로 기능함 아래
크로스탭(스포츠 토토 결과 source_sql, 스포츠 토토 결과 카테고리_sql) 레코드 집합 생성"피벗 테이블"두 번째 쿼리에 의해 지정된 값 열 포함
크로스탭(스포츠 토토 결과 sql, int 아니) 레코드 집합

사용되지 않는 버전크로스탭(스포츠 토토 결과). 매개변수N이제 무시됩니다. 값 열의 개수는 항상 호출 쿼리에 의해 결정됨

connectby(텍스트 상대 이름, 텍스트 keyid_fld, 텍스트 parent_keyid_fld [, 텍스트 orderby_fld ], 텍스트 start_with, int max_le스포츠 토토 결과th [, 텍스트 Branch_delim ]) 레코드 집합 계층 트리 표현을 생성합니다. 구조

F.35.1.1.normal_rand

normal_rand(int numvals, float8 평균, float8 stddev)는 setof float8을 반환합니다.

normal_rand세트를 생성합니다 정규 분포된 난수 값(가우스 배포).

숫자값의 개수입니다. 함수에서 반환됩니다.평균는 정규분포의 평균입니다. 가치와stddev이것은 값의 정규 분포의 표준 편차입니다.

예를 들어, 이 호출은 평균이 다음과 같은 1000개의 값을 요청합니다. 5이고 표준편차는 3입니다.

테스트=# SELECT * FROM Normal_rand(1000, 5, 3);
     노멀_랜드
---------
     1.56556322244898
     9.10040991424657
     5.36957140345079
   -0.369151492880995
    0.283600703686639
       .
       .
       .
     4.82992125404908
     9.71308014517282
     2.49639286969028
(1000행)

F.35.1.2.크로스탭(스포츠 토토 결과)

크로스탭(스포츠 토토 결과 SQL)
크로스탭(스포츠 토토 결과 sql, int N)

크로스탭함수는 생산하는 데 사용됨"피벗"디스플레이, 여기서 데이터는 아래가 아닌 페이지 전체에 나열됩니다. 에 대한 예를 들어 다음과 같은 데이터가 있을 수 있습니다.

row1 발11
행1 발12
행1 발13
...
행2 발21
행2 발22
행2 발23
...

다음과 같이 표시하고 싶습니다

row1 발11 발12 발13 ...
행2 발21 발22 발23 ...
...

크로스탭함수는 원시 데이터를 생성하는 SQL 쿼리인 스포츠 토토 결과 매개변수 첫 번째 방식으로 형식이 지정되고 형식이 지정된 테이블이 생성됩니다. 두 번째 방법입니다.

sql매개변수가 SQL임 데이터의 소스 세트를 생성하는 명령문입니다. 이 문은 하나를 반환해야 합니다.row_name열, 하나범주열, 그리고 하나열.N은 더 이상 사용되지 않는 매개변수입니다. 제공되면 무시됩니다(이전에는 이 매개변수입니다). 출력 값 열의 수와 일치해야 했지만 이제는 호출 쿼리에 의해 결정됩니다.)

예를 들어, 제공된 쿼리는 세트를 생성할 수 있습니다 다음과 같은 것:

row_name 고양이 값
--------+---------+-------
  행1 cat1 발1
  행1 고양이2 발2
  행1 cat3 발3
  행1 cat4 발4
  행2 고양이1 발5
  행2 고양이2 발6
  행2 cat3 발7
  행2 cat4 val8

크로스탭함수는 복귀 선언레코드 집합그래서 출력 열의 실제 이름과 유형을 정의해야 합니다. 에서발신소명절선택문, 예:

SELECT * FROM crosstab('...') AS ct(행_이름 스포츠 토토 결과, 카테고리_1 스포츠 토토 결과, 카테고리_2 스포츠 토토 결과);

이 예는 다음과 같은 집합을 생성합니다.

<== 값 열 ==
 행_이름 카테고리_1 카테고리_2
----------+------------+------------
  행1 값1 값2
  행2 발5 발6

발신절은 다음을 정의해야 합니다. 하나로 출력row_name열 (SQL의 첫 번째 결과 열과 동일한 데이터 유형) 쿼리) 다음에 N이 옵니다.열(모두 세 번째 결과 열과 동일한 데이터 유형) SQL 쿼리의). 출력값을 원하는 만큼 설정할 수 있습니다. 원하는대로 열. 출력 열의 이름이 올라갔습니다. 당신에게.

크로스탭함수 각 연속 입력 그룹에 대해 하나의 출력 행을 생성합니다. 동일한 행row_name값. 출력을 채웁니다.열, 왼쪽에서 오른쪽으로,이 행의 필드입니다. 만약 있다면 출력보다 그룹의 행 수가 적습니다.열, 추가 출력 열 널로 채워져 있습니다. 행이 더 있으면 추가 입력 행을 건너뜁니다.

실제로 SQL 쿼리는 항상 다음을 지정해야 합니다.1,2순으로 주문입력 행이 다음과 같은지 확인합니다. 올바른 순서, 즉 동일한 값row_name함께 모여서 행 내에서 올바르게 정렬되었습니다. 참고하세요크로스탭자체는 전혀 주의를 기울이지 않습니다. 쿼리 결과의 두 번째 열로 이동합니다. 그냥 거기에 있어 순서를 정하다, 세 번째 열의 순서를 제어하기 위해 값이 페이지 전체에 나타납니다.

다음은 완전한 예입니다:

CREATE TABLE ct(id SERIAL, rowid TEXT, 속성 TEXT, 값 TEXT);
INSERT INTO ct(rowid, 속성, 값) VALUES('test1','att1','val1');
INSERT INTO ct(rowid, 속성, 값) VALUES('test1','att2','val2');
INSERT INTO ct(rowid, 속성, 값) VALUES('test1','att3','val3');
INSERT INTO ct(rowid, 속성, 값) VALUES('test1','att4','val4');
INSERT INTO ct(rowid, 속성, 값) VALUES('test2','att1','val5');
INSERT INTO ct(rowid, 속성, 값) VALUES('test2','att2','val6');
INSERT INTO ct(rowid, 속성, 값) VALUES('test2','att3','val7');
INSERT INTO ct(rowid, 속성, 값) VALUES('test2','att4','val8');

선택 *
크로스탭에서(
  'rowid, 속성, 값 선택
   CT에서
   여기서 속성 = ''att2'' 또는 속성 = ''att3''
   1,2' 단위로 주문하세요)
AS ct(행_이름 스포츠 토토 결과, 카테고리_1 스포츠 토토 결과, 카테고리_2 스포츠 토토 결과, 카테고리_3 스포츠 토토 결과);

 행_이름 | 카테고리_1 | 카테고리_2 | 카테고리_3
----------+------------+------------+------------
 테스트1 | 발2 | 발3 |
 테스트2 | 발6 | 발7 |
(2행)

항상 다음을 작성하지 않아도 됩니다.발신절을 사용하여 출력 열을 정의합니다. 원하는 사용자 정의 크로스탭 기능 설정 출력 행 유형을 해당 정의에 연결합니다. 이 설명되어 있습니다 다음 섹션에서. 또 다른 가능성은 필수발신뷰의 절 정의.

F.35.1.3.크로스탭N(스포츠 토토 결과)

크로스탭N(스포츠 토토 결과 SQL)

크로스탭N함수는 다음과 같은 예입니다. 일반에 대한 사용자 정의 래퍼를 설정하려면크로스탭함수이므로 필요하지 않습니다. 호출 시 열 이름과 유형을 작성합니다.선택질의.테이블펑크모듈 포함크로스탭2, 크로스탭3크로스탭4, 출력 행 유형은 다음과 같습니다. 다음과 같이 정의됨

CREATE TYPE tablefunc_crosstab_N AS(
    행_이름 TEXT,
    카테고리_1 스포츠 토토 결과,
    카테고리_2 스포츠 토토 결과,
        .
        .
        .
    카테고리_N TEXT
);

따라서 이 함수는 입력 시 직접 사용할 수 있습니다. 쿼리 생성row_name그리고유형의 열스포츠 토토 결과, 2, 3 또는 4개의 출력 값을 원합니다. 열. 다른 모든 방법에서는 설명된 대로 정확하게 작동합니다. 위의 일반용크로스탭함수.

예를 들어, 이전 섹션에 제공된 예는 다음과 같이 작동할 수도 있습니다.

선택 *
크로스탭3(
  'rowid, 속성, 값 선택
   CT에서
   여기서 속성 = ''att2'' 또는 속성 = ''att3''
   1,2' 단위로 주문);

이 기능은 주로 설명을 위해 제공됩니다. 목적. 자신만의 반환 유형과 함수를 만들 수 있습니다. 기본을 기반으로크로스탭()함수. 두 가지 방법이 있습니다. 해 보세요:

  • 원하는 출력을 설명하는 복합 유형 생성 열(예제와 유사함)contrib/tablefunc/tablefunc--1.0.sql. 그런 다음 하나를 허용하는 고유한 함수 이름을 정의합니다.스포츠 토토 결과매개변수 및 반환setof your_type_name, 하지만 연결 중 동일한 기본으로크로스탭C 함수. 예를 들어, 소스 데이터는 다음과 같은 행 이름을 생성합니다.스포츠 토토 결과및 다음과 같은 값float8, 5개의 값 열이 필요합니다.

    CREATE TYPE my_crosstab_float8_5_cols AS(
        my_row_name 스포츠 토토 결과,
        my_category_1 float8,
        my_category_2 float8,
        my_category_3 float8,
        my_category_4 float8,
        my_category_5 float8
    );
    
    함수 생성 또는 교체 crosstab_float8_5_cols(text)
        my_crosstab_float8_5_cols 세트를 반환합니다.
        AS '$libdir/tablefunc','crosstab' LANGUAGE C STABLE STRICT;
  • 사용아웃정의할 매개변수 반환 유형을 암시적으로 지정합니다. 같은 예도 가능하다 이렇게 하면 됩니다:

    함수 생성 또는 교체 crosstab_float8_5_cols(
        스포츠 토토 결과로,
        OUT my_row_name 스포츠 토토 결과,
        OUT my_category_1 float8,
        OUT my_category_2 float8,
        OUT my_category_3 float8,
        OUT my_category_4 float8,
        OUT my_category_5 float8)
      RETURNS 레코드 세트
      AS '$libdir/tablefunc','crosstab' LANGUAGE C STABLE STRICT;

F.35.1.4.크로스탭(스포츠 토토 결과, 스포츠 토토 결과)

크로스탭(스포츠 토토 결과 source_sql, 스포츠 토토 결과 카테고리_sql)

단일 매개변수 형식의 주요 제한사항크로스탭그것은 모든 것을 치료한다는 것입니다 같은 그룹의 값, 각 값을 첫 번째 값에 삽입 사용 가능한 열입니다. 값 열을 일치시키려는 경우 특정 데이터 범주에 적용되며 일부 그룹에서는 그렇지 않을 수도 있습니다. 일부 카테고리에 대한 데이터가 있는데 제대로 작동하지 않습니다. 두 매개변수 형식의크로스탭다음을 제공하여 이 사례를 처리합니다. 출력에 해당하는 범주의 명시적인 목록 열.

source_sqlSQL 문입니다 이는 데이터의 소스 세트를 생성합니다. 이 진술은 반드시 하나를 반환row_name열, 하나범주열, 그리고 하나열. 또한 하나 이상"추가"열.행_이름열이 첫 번째여야 합니다.범주그리고열은 마지막 두 개여야 합니다 열, 순서대로. 사이의 모든 열행_이름그리고범주다음과 같이 취급됩니다"추가"."추가"열은 동일할 것으로 예상됩니다. 동일한 모든 행에 대해행_이름값.

예를 들어,source_sql아마도 다음과 같은 세트를 생성합니다.

SELECT row_name, extra_col, cat, value FROM foo ORDER BY 1;

 row_name extra_col 고양이 값
----------+------------+------+---------
  row1 extra1 cat1 val1
  행1 추가1 cat2 val2
  행1 추가1 cat4 val4
  row2 extra2 cat1 val5
  row2 extra2 cat2 val6
  row2 extra2 cat3 val7
  row2 extra2 cat4 val8

category_sqlSQL 문입니다 카테고리 세트를 생성하는 것입니다. 이 진술은 반드시 하나의 열만 반환합니다. 최소한 하나의 행을 생성해야 합니다. 오류가 발생합니다. 또한 생산해서는 안 된다. 값이 중복되지 않으면 오류가 발생합니다.category_sql다음과 같을 수 있습니다:

foo ORDER BY 1에서 고유한 고양이 선택;
    고양이
  -------
    고양이1
    고양이 2
    고양이3
    고양이4

크로스탭함수는 복귀 선언레코드 집합그래서 출력 열의 실제 이름과 유형을 정의해야 합니다. 에서발신소명절선택문, 예:

SELECT * FROM 크로스탭('...', '...')
    AS ct(row_name 스포츠 토토 결과, 추가 스포츠 토토 결과, cat1 스포츠 토토 결과, cat2 스포츠 토토 결과, cat3 스포츠 토토 결과, cat4 스포츠 토토 결과);

이것은 다음과 같은 결과를 낳습니다:

<== 값 열 ==
row_name 추가 cat1 cat2 cat3 cat4
---------+-------+------+------+------+------
  행1 추가1 발1 발2 발4
  row2 extra2 val5 val6 val7 val8

발신절은 다음을 정의해야 합니다. 적절한 데이터 유형의 적절한 수의 출력 열. 만약에 있습니다Nsource_sql쿼리 결과, 먼저N-2개는 일치해야 합니다. 첫 번째로 시작N-2 출력 열. 나머지 출력 열의 유형은 다음과 같아야 합니다. 의 마지막 열source_sql쿼리의 결과이며 정확히 개수만큼 있어야 합니다. 에 행이 있습니다category_sql쿼리 결과입니다.

크로스탭함수 각 연속 입력 그룹에 대해 하나의 출력 행을 생성합니다. 동일한 행행_이름값. 출력행_이름열 및 기타"추가"열, 그룹의 첫 번째 행에서 복사됩니다. 출력열은 다음으로 채워져 있습니다.행의 필드 일치하는범주값. 행의 경우범주하지 않습니다 의 출력과 일치합니다.category_sql쿼리, 그것무시됩니다. 출력 열 일치하는 카테고리가 다음 입력 행에 없습니다. 그룹은 null로 채워집니다.

실제로는source_sql쿼리는 항상 지정해야 함주문 기준 1값이 동일한지 확인하기 위해row_name함께 모였습니다. 그러나, 그룹 내 카테고리의 순서는 중요하지 않습니다. 또한,의 순서가 올바른지 확인하는 것이 중요합니다.category_sql쿼리의 출력 지정된 출력 열 순서와 일치합니다.

다음은 두 가지 완전한 예입니다:

판매 테이블 생성(연도 정수, 월 정수, 수량 정수);
판매액에 삽입(2007, 1, 1000);
판매액에 삽입(2007, 2, 1500);
판매액에 삽입(2007, 7, 500);
판매액에 삽입(2007, 11, 1500);
판매액에 삽입(2007, 12, 2000);
판매액에 삽입(2008, 1, 1000);

크로스탭에서 *를 선택합니다(
  '판매주문서에서 연도, 월, 수량을 1씩 선택',
  'generate_series(1,12) m에서 m을 선택하세요.'
)로 (
  연도 정수,
  "Jan" 정수,
  "2월" 정수,
  "3월" int,
  "4월" 정수,
  "5월" 정수,
  "준" 정수,
  "7월" int,
  "8월" 정수,
  "9월" 정수,
  "10월" 정수,
  "11월" int,
  "12월" 정수
);
 년 | 1월 | 2월 | 3월 | 4월 | 5월 | 준 | 7월 | 8월 | 9월 | 10월 | 11월 | 12월
------+------+------+------+------+-----+------+------+------+------+------+------+------
 2007년 | 1000 | 1500 |     |     |     |     | 500 |     |     |     | 1500 | 2000
 2008 | 1000 |      |     |     |     |     |     |     |     |     |      |
(2행)
CREATE TABLE cth(rowid 스포츠 토토 결과, rowdt 타임스탬프, 속성 스포츠 토토 결과, val 스포츠 토토 결과);
INSERT INTO cth VALUES('test1','2003년 3월 1일','온도','42');
INSERT INTO cth VALUES('test1','2003년 3월 1일','test_result','PASS');
INSERT INTO cth VALUES('test1','2003년 3월 1일','volts','2.6987');
INSERT INTO cth VALUES('test2','2003년 3월 2일','온도','53');
INSERT INTO cth VALUES('test2','2003년 3월 2일','test_result','FAIL');
INSERT INTO cth VALUES('test2','2003년 3월 2일','test_startdate','2003년 3월 01일');
INSERT INTO cth VALUES('test2','2003년 3월 2일','volts','3.1234');

SELECT * FROM 크로스탭
(
  'SELECT rowid, rowdt, 속성, 값 FROM cth ORDER BY 1',
  'Cth ORDER BY 1에서 DISTINCT 속성 선택'
)
그대로
(
       로우이드 스포츠 토토 결과,
       rowdt 타임스탬프,
       온도 정수4,
       테스트_결과 스포츠 토토 결과,
       test_startdate 타임스탬프,
       볼트 float8
);
 로우이드 |          행트 | 온도 | 테스트_결과 |      테스트_시작일 | 볼트
--------+---------------+------------+-------------+---------------+---------
 테스트1 | 2003년 3월 1일 토요일 00:00:00 |          42 | 패스 |                          | 2.6987
 테스트2 | 2003년 3월 2일 일요일 00:00:00 |          53 | 실패 | 2003년 3월 1일 토요일 00:00:00 | 3.1234
(2행)

사전 정의된 함수를 생성하면 다음 작업을 피할 수 있습니다. 각 쿼리에 결과 열 이름과 유형을 작성합니다. 이전 섹션의 예를 참조하세요. 기본 C 이 형식의 함수크로스탭이름이 있음crosstab_hash.

F.35.1.5.커넥트바이

connectby(스포츠 토토 결과 relname, 스포츠 토토 결과 keyid_fld, 스포츠 토토 결과 parent_keyid_fld
          [, 스포츠 토토 결과 orderby_fld ], 스포츠 토토 결과 start_with, int max_length
          [, 스포츠 토토 결과 Branch_delim ])

커넥트비함수 저장되어 있는 계층적 데이터의 표시를 생성합니다. 테이블. 테이블에는 고유한 키 필드가 있어야 합니다. 행과 이를 참조하는 상위 키 필드를 식별합니다. 각 행의 상위(있는 경우).커넥트바이하위 트리를 표시할 수 있습니다 임의의 행에서 내림차순입니다.

테이블 F-31매개변수를 설명합니다.

표 F-31.커넥트바이매개변수

매개변수 설명
relname 소스 관계의 이름
keyid_fld 키 필드 이름
parent_keyid_fld 상위 키 필드의 이름
orderby_fld 형제 항목을 정렬할 필드 이름 (선택사항)
start_with 시작할 행의 키 값
최대_깊이 하강할 최대 깊이 또는 0 무제한 깊이
branch_delim 분기 출력에서 키를 구분하는 문자열 (선택사항)

키 및 상위 키 필드는 모든 데이터 유형이 될 수 있지만 동일한 유형이어야 합니다. 참고하세요start_with값은 스포츠 토토 결과로 입력되어야 합니다. 키 필드의 유형에 관계없이 문자열입니다.

커넥트비함수는 복귀 선언레코드 세트그래서 출력 열의 실제 이름과 유형을 정의해야 합니다. 에서발신소명절선택문, 예:

SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0, '~')
    AS t(keyid 스포츠 토토 결과, parent_keyid 스포츠 토토 결과, 레벨 int, 분기 스포츠 토토 결과, pos int);

처음 두 출력 열은 현재 항목에 사용됩니다. 행의 키와 해당 상위 행의 키 유형과 일치해야 합니다. 테이블의 키 필드. 세 번째 출력 열은 트리의 깊이이며 유형이어야 합니다.정수. 만약에branch_delim매개변수가 주어졌습니다. 다음 출력 열은 분기 표시이며 유형이어야 합니다.스포츠 토토 결과. 마지막으로 만약에orderby_fld매개변수가 주어졌습니다. 마지막 출력 열은 일련 번호이며 유형이어야 합니다.정수.

"가지"출력 열 현재 행에 도달하기 위해 사용되는 키의 경로를 표시합니다. 는 키는 지정된 값으로 구분됩니다.branch_delim문자열. 분기 표시가 없는 경우 원함, 둘 다 생략branch_delim매개변수 및 출력 열의 분기 열 목록.

동일한 부모의 형제자매 순서가 다음과 같은 경우 중요합니다. 다음을 포함하세요.orderby_fld동위 항목을 정렬할 필드를 지정하는 매개변수입니다. 이 필드는 정렬 가능한 모든 데이터 유형이 될 수 있습니다. 출력 열 목록에는 최종 정수 일련번호 열이 포함되어야 합니다. 그리고 경우에만orderby_fld이다 지정되었습니다.

테이블 및 필드 이름을 나타내는 매개변수는 다음과 같습니다. 있는 그대로 SQL 쿼리에 복사되었습니다.커넥트바이내부적으로 생성됩니다. 그러므로, 이름에 대소문자가 혼합되어 있거나 다음이 포함된 경우 큰따옴표를 포함합니다. 특수 문자. 또한 스키마를 검증해야 할 수도 있습니다. 테이블 이름.

큰 테이블에서는 다음이 없으면 성능이 저하됩니다. 상위 키 필드의 인덱스입니다.

중요한 것은branch_delim문자열이 어떤 키에도 나타나지 않습니다 값, 기타커넥트바이5월 무한 재귀 오류를 잘못 보고했습니다. 만약에 참고하세요branch_delim제공되지 않았습니다. 기본값은~다음 용도로 사용됩니다. 재귀 감지 목적.

다음은 예입니다:

CREATE TABLE connectby_tree(keyid 스포츠 토토 결과, parent_keyid 스포츠 토토 결과, pos int);

INSERT INTO connectby_tree VALUES('row1',NULL, 0);
INSERT INTO connectby_tree VALUES('row2','row1', 0);
INSERT INTO connectby_tree VALUES('row3','row1', 0);
INSERT INTO connectby_tree VALUES('row4','row2', 1);
INSERT INTO connectby_tree VALUES('row5','row2', 0);
INSERT INTO connectby_tree VALUES('row6','row4', 0);
INSERT INTO connectby_tree VALUES('row7','row3', 0);
INSERT INTO connectby_tree VALUES('row8','row6', 0);
INSERT INTO connectby_tree VALUES('row9','row5', 0);

-- 브랜치 있음, orderby_fld 없음(결과 순서는 보장되지 않음)
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'row2', 0, '~')
 AS t(키 ID 스포츠 토토 결과, parent_keyid 스포츠 토토 결과, 레벨 int, 분기 스포츠 토토 결과);
 키ID | 부모_키ID | 수준 |       가지
--------+---------------+-------+---------
 행2 |              |     0 | 행 2
 행4 | 행2 |     1 | 2행~4행
 행 6 | 행4 |     2 | 행2~행4~행6
 행8 | 행 6 |     3 | 행2~행4~행6~8행
 행 5 | 행2 |     1 | 2행~5행
 행9 | 행 5 |     2 | 2행~5행~9행
(6열)

-- 분기 없음, orderby_fld 없음(결과 순서는 보장되지 않음)
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'row2', 0)
 AS t(keyid 스포츠 토토 결과, parent_keyid 스포츠 토토 결과, level int);
 키ID | 부모_키ID | 레벨
--------+---------------+-------
 행2 |              |     0
 행4 | 행2 |     1
 행 6 | 행4 |     2
 행8 | 행 6 |     3
 행 5 | 행2 |     1
 행9 | 행 5 |     2
(6열)

-- 분기 포함, orderby_fld 포함(row5가 row4 앞에 옴에 유의)
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0, '~')
 AS t(keyid 스포츠 토토 결과, parent_keyid 스포츠 토토 결과, 레벨 int, 분기 스포츠 토토 결과, pos int);
 키ID | 부모_키ID | 수준 |       지점 | 포스
------+---------------+-------+---------+-----
 행2 |              |     0 | 행2 |   1
 행 5 | 행2 |     1 | 2행~5행 |   2
 행9 | 행 5 |     2 | 행2~행5~행9 |   3
 행4 | 행2 |     1 | 2행~4행 |   4
 행 6 | 행4 |     2 | 행2~행4~행6 |   5
 행8 | 행 6 |     3 | 행2~행4~행6~8행 |   6
(6열)

-- 분기 없음, orderby_fld 사용(row5가 row4 앞에 옴에 유의)
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0)
 AS t(keyid 스포츠 토토 결과, parent_keyid 스포츠 토토 결과, level int, pos int);
 키ID | 부모_키ID | 수준 | 포스
------+---------------+---------+-----
 행2 |              |     0 |   1
 행 5 | 행2 |     1 |   2
 행9 | 행 5 |     2 |   3
 행4 | 행2 |     1 |   4
 행 6 | 행4 |     2 |   5
 행8 | 행 6 |     3 |   6
(6행)

F.35.2. 작성자

조 콘웨이