| PostgreSQL 9.1.24 문서 | ||||
|---|---|---|---|---|
| 범퍼카 토토 PostgreSQL : 문서 : 9.1 : sslinfo | 위로 | 부록 F. 추가 제공 모듈 | 4토토 핫_101 | |
그테이블 기능모듈에는 다음이 포함됩니다. 테이블(즉, 여러 행)을 반환하는 다양한 함수입니다. 이러한 기능은 그 자체로나 다음과 같은 용도로 유용합니다. 여러 값을 반환하는 C 함수를 작성하는 방법의 예 행.
표 F-29다음에서 제공하는 기능을 보여줍니다.테이블 기능모듈.
표 F-29.테이블 기능기능
| 기능 | 반품 | 설명 |
|---|---|---|
normal_rand(int numvals,
float8 평균, float8 stddev) |
setof float8 | 정규분포된 무작위 집합을 생성합니다. 값 |
크로스탭(배트맨 토토
SQL) |
레코드 집합 | 생성"피벗 테이블"행 이름 + 포함N값 열, 여기서N행 유형에 따라 결정됩니다. 호출 쿼리에 지정됨 |
크로스탭N(배트맨 토토 SQL) |
setof table_배트맨 토토_N | 생성"피벗 테이블"행 이름 + 포함N값 열.크로스탭2, 크로스탭3및크로스탭4미리 정의되어 있지만 다음을 수행할 수 있습니다.
추가 생성크로스탭N설명된 대로 기능함
아래 |
크로스탭(배트맨 토토 source_sql,
배트맨 토토 카테고리_sql) |
레코드 집합 | 생성"피벗 테이블"두 번째 쿼리에 의해 지정된 값 열 포함 |
크로스탭(배트맨 토토 sql, int
아니) |
레코드 집합 |
구식 버전 |
connectby(배트맨 토토 상대 이름, 배트맨 토토
keyid_fld, 배트맨 토토 parent_keyid_fld [, 배트맨 토토 orderby_fld ],
배트맨 토토 start_with, int max_length [, 배트맨 토토 Branch_delim
]) |
레코드 집합 | 계층 트리 표현을 생성합니다. 구조 |
normal_randnormal_rand(int numvals, float8 평균, float8 stddev)는 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행)
크로스탭(배트맨 토토)크로스탭(배트맨 토토 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 배트맨 토토('...') 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행)
항상 다음을 작성하지 않아도 됩니다.발신절을 사용하여 출력 열을 정의합니다. 원하는 사용자 정의 크로스탭 기능 설정 출력 행 유형을 해당 정의에 연결합니다. 이 설명되어 있습니다 다음 섹션에서. 또 다른 가능성은 필수발신뷰의 절 정의.
크로스탭N(배트맨 토토)크로스탭N(배트맨 토토 SQL)
그크로스탭N함수는 다음과 같은 예입니다.
일반에 대한 사용자 정의 래퍼를 설정하려면크로스탭함수이므로 필요하지 않습니다.
호출 시 열 이름과 유형을 작성합니다.선택질의.테이블펑크모듈 포함크로스탭2, 크로스탭3및크로스탭4, 출력 행 유형은 다음과 같습니다.
다음과 같이 정의됨
CREATE TYPE tablefunc_배트맨 토토_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;
크로스탭(배트맨 토토,
배트맨 토토)크로스탭(배트맨 토토 source_sql, 배트맨 토토 카테고리_sql)
단일 매개변수 형식의 주요 제한사항크로스탭그것은 모든 것을 치료한다는 것입니다
같은 그룹의 값, 각 값을 첫 번째 값에 삽입
사용 가능한 열입니다. 값 열을 일치시키려는 경우
특정 데이터 범주에 적용되며 일부 그룹에서는 그렇지 않을 수도 있습니다.
일부 카테고리에 대한 데이터가 있는데 제대로 작동하지 않습니다.
두 매개변수 형식의크로스탭다음을 제공하여 이 사례를 처리합니다.
출력에 해당하는 범주의 명시적인 목록
열.
source_sqlSQL 문입니다 이는 데이터의 소스 세트를 생성합니다. 이 진술은 반드시 하나를 반환행_이름열, 하나범주열, 그리고 하나값열. 또한 하나 이상"추가"열.row_name열이 첫 번째여야 합니다.범주그리고값열은 마지막 두 개여야 합니다 열, 순서대로. 사이의 모든 열row_name그리고범주다음과 같이 취급됩니다"추가"."추가"열은 동일할 것으로 예상됩니다. 동일한 모든 행에 대해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
그발신절은 다음을 정의해야 합니다. 적절한 데이터 유형의 적절한 수의 출력 열. 만약에 있습니다N열source_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
이 형식의 함수크로스탭이름이 지정됨배트맨 토토_hash.
커넥트비connectby(배트맨 토토 relname, 배트맨 토토 keyid_fld, 배트맨 토토 parent_keyid_fld
[, 배트맨 토토 orderby_fld ], 배트맨 토토 start_with, int max_length
[, 배트맨 토토 Branch_delim ])
그커넥트바이함수
저장되어 있는 계층적 데이터의 표시를 생성합니다.
테이블. 테이블에는 고유한 키 필드가 있어야 합니다.
행과 이를 참조하는 상위 키 필드를 식별합니다.
각 행의 상위(있는 경우).커넥트비하위 트리를 표시할 수 있습니다
임의의 행에서 내림차순입니다.
테이블 F-30매개변수를 설명합니다.
표 F-30.커넥트바이매개변수
| 매개변수 | 설명 |
|---|---|
| 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행)
조 콘웨이