토토 커뮤니티
및 기타)#tablefunc
모듈에는 토토 커뮤니티 반환하는 다양한 기능 (즉, 여러 행)이 포함되어 있습니다. 이러한 기능은 여러 행을 반환하는 C 함수를 작성하는 방법의 예로 그 자체로 유용합니다.
이 모듈이 고려됩니다“신뢰할 수있는”Create
현재 데이터베이스의 권한.
토토 커뮤니티 F.32tablefunc
모듈.
표 F.32. TableFunc
기능
Normal_rand
#normal_rand (int numvals, float8 mean, float8 stddev) setsof float8을 반환합니다.
normal_rand
정규 분포 랜덤 값 세트를 생성합니다 (가우스 분포).
numvals
함수에서 반환 할 값 수입니다.평균
값은 값의 정규 분포의 평균이며stddev
값의 정규 분포의 표준 편차입니다.
예를 들어,이 호출은 평균 5이고 표준 편차가 3 :의 1000 값을 요청합니다.
test =# select * from normal_rand (1000, 5, 3); normal_rand ------------------------ 1.56556322244898 9.10040991424657 5.36957140345079 -0.369151492880995 0.283600703686639 . . . 4.82992125404908 9.71308014517282 2.49639286969028 (1000 줄)
토토 커뮤니티 (텍스트)
#토토 커뮤니티 (Text SQL) crosstab (텍스트 SQL, int n)
the토토 커뮤니티
함수는 생산에 사용됩니다“Pivot”디스플레이, 여기서 데이터는 다운이 아닌 페이지에 나열됩니다. 예를 들어,와 같은 데이터가있을 수 있습니다.
ROW1 VAL11 ROW1 VAL12 ROW1 VAL13 ... ROW2 VAL21 ROW2 VAL22 ROW2 VAL23 ...
우리가 표시하고 싶은
ROW1 VAL11 VAL12 VAL13 ... ROW2 VAL21 VAL22 VAL23 ... ...
the토토 커뮤니티
함수는 첫 번째 방식으로 형식으로 원시 데이터를 생성하는 SQL 쿼리 인 텍스트 매개 변수를 가져 와서 두 번째 방식으로 형식으로 형식화 된 테이블을 생성합니다.
theSQL
매개 변수는 소스 데이터 세트를 생성하는 SQL 문입니다. 이 진술은 하나를 반환해야합니다row_name
열, 하나카테고리
열, 1value
열.n
는 쓸모없는 매개 변수입니다.
예를 들어, 제공된 쿼리는 다음과 같은 세트를 생성 할 수 있습니다.
row_name cat 값 ----------+-------+------- ROW1 CAT1 VAL1 ROW1 CAT2 VAL2 ROW1 CAT3 VAL3 ROW1 CAT4 VAL4 ROW2 CAT1 VAL5 ROW2 CAT2 VAL6 ROW2 CAT3 VAL7 Row2 CAT4 VAL8
the토토 커뮤니티
함수는 반환으로 선언 됨Setof Record
, 따라서 출력 열의 실제 이름과 유형은에 정의되어야합니다.From
전화 조항select
진술, 예 :
선택 *에서 CROSSTAB ( '...')에서 CT (row_name 텍스트, 카테고리 _1 텍스트, Category_2 Text);로 선택하십시오.
이 예제는 다음과 같은 세트를 생성합니다.
<== 값 열 == row_name 카테고리 _1 카테고리 _2 ----------+-----------+------------- ROW1 VAL1 VAL2 Row2 Val5 Val6
theFrom
조항은 출력을 하나로 정의해야합니다row_name
열 (SQL 쿼리의 첫 번째 결과 열과 동일한 데이터 유형)과 N 열value
열 (SQL 쿼리의 세 번째 결과 열과 동일한 데이터 유형). 원하는만큼의 출력 값 열을 설정할 수 있습니다. 출력 열의 이름은 귀하에게 달려 있습니다.
the토토 커뮤니티
함수는 각 연속 입력 행 그룹에 대해 하나의 출력 행을 생성합니다.row_name
값. 출력을 채 웁니다value
열, 왼쪽에서 오른쪽으로value
이 행의 필드. 그룹에 출력이있는 것보다 행이 적은 경우value
열, 추가 출력 열에는 널로 채워집니다. 행이 더 많으면 추가 입력 행이 건너 뜁니다.
실제로 SQL 쿼리는 항상 지정해야합니다1,2 주문
입력 행이 올바르게 주문되어 있는지 확인합니다. 즉, 동일한 값row_name
는 함께 모여 행 내에서 정확하게 주문됩니다. 주석토토 커뮤니티
자체는 쿼리 결과의 두 번째 열에주의를 기울이지 않습니다. 3 열 값이 페이지를 가로 질러 나타나는 순서를 제어하기 위해 주문해야합니다.
여기에 완전한 예가 있습니다 :
테이블 CT 작성 (ID Serial, Rowid 텍스트, 속성 텍스트, 값 텍스트); CT (rowid, 속성, 값) 값 ( 'test1', 'att1', 'val1')에 삽입; CT (rowid, 속성, 값) 값 ( 'test1', 'att2', 'val2')에 삽입; CT (rowid, 속성, 값) 값 ( 'test1', 'att3', 'val3')에 삽입; CT (rowid, 속성, 값) 값 ( 'test1', 'att4', 'val4')에 삽입; CT (rowid, 속성, 값) 값 ( 'test2', 'att1', 'val5')에 삽입; CT (rowid, 속성, 값) 값 ( 'test2', 'att2', 'val6')에 삽입; CT (rowid, 속성, 값) 값 ( 'test2', 'att3', 'val7')에 삽입; CT (rowid, 속성, 값) 값 ( 'test2', 'att4', 'val8')에 삽입; 선택하다 * 토토 커뮤니티에서 ( 'Rowid, 속성, 값을 선택하십시오 CT에서 여기서 속성 = ''att2 ''또는 attribute = ''att3 '' 1,2 '로 주문 CT (row_name 텍스트, 카테고리 _1 텍스트, 카테고리_2 텍스트, Category_3 텍스트); row_name | 카테고리 _1 | 카테고리 _2 | 카테고리 _3 -----------+------------+------------+------------ test1 | Val2 | val3 | test2 | Val6 | val7 | (2 줄)
당신은 항상 a를 쓰지 않아도됩니다.From
정의에 연결된 원하는 출력 행 유형을 갖는 사용자 정의 crosstab 함수를 설정하여 출력 열을 정의하는 절입니다. 이것은 다음 섹션에 설명되어 있습니다. 또 다른 가능성은 필요한 것을 포함시키는 것입니다From
보기 정의의 조항.
참조\ 토토 커뮤니티view
명령PSQL토토 커뮤니티 ()
.
토토 커뮤니티n
(텍스트)
#토토 커뮤니티n
(텍스트 SQL)
the토토 커뮤니티
기능은 일반을위한 사용자 정의 포장지를 설정하는 방법의 예입니다n
토토 커뮤니티
함수, 호출에 열 이름과 유형을 쓸 필요가 없도록select
쿼리. 그만큼탁자
모듈 포함토토 커뮤니티2
, 토토 커뮤니티3
및토토 커뮤니티4
, 출력 행 유형은로 정의됩니다.
유형 생성 tablefunc_crosstab_n as ( row_name 텍스트, 카테고리 _1 텍스트, 카테고리 _2 텍스트, . . . 카테고리_n 텍스트 );
따라서 이러한 기능은 입력 쿼리가 생성 될 때 직접 사용할 수 있습니다row_name
andvalue
유형의 열텍스트
, 2, 3 또는 4 개의 출력 값 열을 원합니다. 다른 모든면에서 그들은 일반에 대해 위에서 설명한대로 정확하게 행동합니다토토 커뮤니티
함수.
예를 들어, 이전 섹션에 주어진 예제도로 작동합니다.
선택 * 토토 커뮤니티3에서 ( 'Rowid, 속성, 값을 선택하십시오 CT에서 여기서 속성 = ''att2 ''또는 attribute = ''att3 '' 주문 1,2 ');
이 기능은 주로 그림 목적으로 제공됩니다. 기본에 따라 자신의 반환 유형 및 기능을 만들 수 있습니다토토 커뮤니티 ()
함수. 그렇게하는 두 가지 방법이 있습니다 :
예제와 유사한 원하는 출력 열을 설명하는 복합 유형 생성Contrib/TableFunc/TableFunc-1.0.SQL
. 그런 다음 고유 한 기능 이름을 정의하여 하나를 수락합니다텍스트
매개 변수 및 반환setof your_type_name
이지만 동일한 기본에 연결토토 커뮤니티
C 함수. 예를 들어, 소스 데이터가의 행 이름을 생성하는 경우텍스트
및 값float8
, 그리고 당신은 5 개의 값 열을 원합니다 :
생성 유형 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 ); 기능 작성 또는 교체 토토 커뮤니티_float8_5_cols (텍스트) my_crosstab_float8_5_cols를 반환합니다 '$ libdir/tablefunc', '토토 커뮤니티'Language C 안정적인 엄격;
useout
반환 유형을 암시 적으로 정의하는 매개 변수. 동일한 예제도 다음 방식으로 수행 할 수 있습니다.
함수 생성 또는 교체 토토 커뮤니티_float8_5_cols ( 텍스트로 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) Setof 레코드를 반환합니다 '$ libdir/tablefunc', '토토 커뮤니티'Language C 안정적인 엄격;
토토 커뮤니티 (텍스트, 텍스트)
#crosstab (텍스트 source_sql, text category_sql)
단일 매개 변수 형태의 주요 제한토토 커뮤니티
는 그룹의 모든 값을 모두 처리하여 각 값을 첫 번째 사용 가능한 열에 삽입하는 것입니다. 값 열이 특정 범주의 데이터에 해당하도록하려면 일부 그룹에 일부 카테고리에 대한 데이터가 없을 수 있으시면 잘 작동하지 않습니다. 2 파라미터 형태의토토 커뮤니티
출력 열에 해당하는 명시 적 범주 목록을 제공 하여이 케이스를 처리합니다.
source_sql
는 소스 데이터 세트를 생성하는 SQL 문입니다. 이 진술은 하나를 반환해야합니다row_name
열, 하나카테고리
열, 1value
열. 또한 하나 이상이있을 수 있습니다“추가”열. 그만큼row_name
열이 먼저 있어야합니다. 그만큼카테고리
andvalue
열은 그 순서대로 마지막 두 열이어야합니다. 사이의 모든 열row_name
and카테고리
“추가”. 그만큼“추가”열은 동일 한 모든 행에 대해 동일 할 것으로 예상row_name
value.
예를 들어source_sql
다음과 같은 세트를 생성 할 수 있습니다.
선택을 선택하십시오. row_name extra_col cat 값 ----------+------------+-----+------- ROW1 Extra1 CAT1 VAL1 ROW1 Extra1 CAT2 VAL2 ROW1 Extra1 CAT4 VAL4 ROW2 Extra2 CAT1 VAL5 Row2 Extra2 CAT2 VAL6 ROW2 Extra2 CAT3 VAL7 Row2 Extra2 CAT4 VAL8
Category_SQL
는 범주 세트를 생성하는 SQL 문입니다. 이 진술은 하나의 열만 리턴해야합니다. 적어도 하나의 행을 생성해야합니다. 그렇지 않으면 오류가 생성됩니다. 또한 중복 값을 생성해서는 안됩니다. 그렇지 않으면 오류가 생성됩니다.Category_SQL
foo 주문에서 1 씩 고유 한 고양이를 선택하십시오. 고양이 ------- CAT1 cat2 cat3 CAT4
the토토 커뮤니티
함수는 반환으로 선언 됨Setof Record
, 따라서 출력 열의 실제 이름과 유형은에 정의되어야합니다.호출 조항
select
진술, 예 :
선택 *에서 토토 커뮤니티 ( '...', '...') CT (row_name 텍스트, 추가 텍스트, CAT1 텍스트, CAT2 텍스트, CAT3 텍스트, CAT4 텍스트);로
이것은 다음과 같은 결과를 낳습니다.
<== 값 열 == Row_name 추가 Cat1 Cat2 Cat3 Cat4 ---------+-------+------+------+------+------ ROW1 Extra1 VAL1 VAL2 VAL4 Row2 Extra2 VAL5 VAL6 VAL7 VAL8
theFrom
절은 적절한 데이터 유형의 적절한 출력 열을 정의해야합니다. 있는 경우n
열의 열source_sql
쿼리 결과, 첫 번째n
-2 중 첫 번째와 일치해야합니다n
-2 출력 열. 나머지 출력 열에는의 마지막 열 유형이 있어야합니다.source_sql
Query의 결과, 그리고에 행이있는 것만 큼 많은 것들이 있어야합니다Category_SQL
쿼리 결과.
the토토 커뮤니티
함수는 동일한 입력 행의 각 연속 그룹에 대해 하나의 출력 행을 생성합니다row_name
값. 출력row_name
컬럼과 모든“추가”열은 그룹의 첫 번째 행에서 복사되었습니다. 출력value
열은로 채워져 있습니다.value
일치하는 행의 필드카테고리
값. 행 인 경우카테고리
의 출력과 일치하지 않습니다Category_SQL
쿼리, ITSvalue
무시됩니다. 그룹의 입력 행에 일치하는 범주가없는 출력 열에는 널로 채워집니다.
실제로source_sql
쿼리는 항상 지정해야합니다1 주문
동일 한 값을 확인하려면row_name
함께 모입니다. 그러나 그룹 내에서 카테고리를 주문하는 것은 중요하지 않습니다. 또한의 순서가 확실합니다.Category_SQL
쿼리의 출력은 지정된 출력 열 순서와 일치합니다.
다음은 다음과 같은 두 가지 예입니다.
테이블 판매 생성 (int, Month Int, Qty int); 판매 값에 삽입 (2007, 1, 1000); 판매 가치에 삽입 (2007, 2, 1500); 판매 값에 삽입 (2007, 7, 500); 판매 가치에 삽입 (2007, 11, 1500); 판매 값에 삽입 (2007, 12, 2000); 판매 값에 삽입 (2008, 1, 1000); 토토 커뮤니티에서 *를 선택하십시오 ( '선택 연도, 월, 영업 주문에서 1 ~ 1', 1 ', 'generate_series (1,12) m에서 m을 선택하십시오' ) 처럼 ( int, "Jan"int, "Feb"int, "mar"int, "apr"int, "5 월"int, "Jun"int, "7 월"int, "8 월"int, "Sep"int, "OCT"int, "11 월"int, "12 월"int ); 해 | Jan | 2 월 | 3 월 | 4 월 | 5 월 | 6 월 | 7 월 | 8 월 | 9 월 | 10 월 | 11 월 | 12 월 ------+------+------+-----+-----+-----+-----+-----+-----+-----+------+------- 2007 | 1000 | 1500 | | | | | 500 | | | | 1500 | 2000 2008 | 1000 | | | | | | | | | | | (2 줄)
테이블 CTH 만들기 (ROWID TEXT, ROWDT 타임 스탬프, 속성 텍스트, val 텍스트); CTH 값에 삽입 ( 'test1', '01 2003 년 3 월 1 일', '온도', '42'); CTH 값에 삽입 ( 'test1', '01 2003 년 3 월 1 일', 'test_result', 'pass'); CTH 값에 삽입 ( 'test1', '01 2003 년 3 월 1 일', '볼트', '2.6987'); CTH 값에 삽입 ( 'test2', '02 2003 년 3 월 2 일', '온도', '53'); CTH 값에 삽입 ( 'test2', '2003 년 3 월 2 일', 'test_result', 'fail'); CTH 값에 삽입 ( 'test2', '02 2003 년 3 월 2 일', 'test_startDate', '01 2003 년 3 월 1 일'); Cth 값에 삽입 ( 'test2', '02 2003 년 3 월 2 일', '볼트', '3.1234'); 토토 커뮤니티에서 *를 선택하십시오 ( 'select rowid, rowdt, attribute, val wrom cth order x 1', 'Cth Order에서 1 x 1 씩 고유 한 속성을 선택하십시오' )) 처럼 ( rowid 텍스트, Rowdt 타임 스탬프, 온도 int4, test_result 텍스트, test_startdate timestamp, 볼트 플로트 8 ); Rowid | Rowdt | 온도 | test_result | test_startdate | 볼트 -------+-------------------------------------------------------------------------------------------------- test1 | 2003 년 3 월 1 일 00:00:00 | 42 | 패스 | | 2.6987 test2 | 2003 년 3 월 02 일 00:00:00 | 53 | 실패 | 2003 년 3 월 1 일 00:00:00 | 3.1234 (2 줄)
각 쿼리에서 결과 열 이름과 유형을 쓰지 않도록 사전 정의 된 함수를 만들 수 있습니다. 이전 섹션의 예를 참조하십시오. 이 형태의 기본 C 함수토토 커뮤니티
토토 커뮤니티_hash
.
Connectby
#Connectby (텍스트 relname, 텍스트 keyid_fld, 텍스트 parent_keyid_fld [, text orderby_fld], text start_with, int max_depth [, text branch_delim])
theConnectby
함수는 테이블에 저장된 계층 적 데이터의 표시를 생성합니다. 테이블에는 행을 고유하게 식별하는 키 필드와 각 행의 부모 (있는 경우)를 참조하는 부모 키 필드가 있어야합니다.Connectby
어떤 행에서 하강하는 서브 트리를 표시 할 수 있습니다.
토토 커뮤니티 F.33매개 변수를 설명합니다.
표 F.33. Connectby
매개 변수
매개 변수 | 설명 |
---|---|
Relname |
소스 관계의 이름 |
keyid_fld |
키 필드의 이름 |
parent_keyid_fld |
부모 키 필드의 이름 |
Orderby_fld |
(옵션)에 의해 형제 자매를 주문할 필드 이름 |
start_with |
시작할 행의 키 값 |
max_depth |
하강하는 최대 깊이 또는 무제한 깊이의 경우 0 |
BRANCE_DELIM |
지점 출력 (선택 사항)으로 키를 분리하려면 문자열 |
키 및 부모 키 필드는 데이터 유형이 될 수 있지만 동일한 유형이어야합니다.start_with
값은 키 필드의 유형에 관계없이 텍스트 문자열로 입력해야합니다.
theConnectby
함수는 반환으로 선언 됨Setof Record
, 따라서 출력 열의 실제 이름과 유형은에 정의되어야합니다.From
호출 조항select
진술, 예 :
select * from Connectby ( 'Connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0, '~'))). as t (keyid text, parent_keyid 텍스트, 레벨 int, 분기 텍스트, pos int);
처음 두 출력 열은 현재 행 키와 부모 행 키에 사용됩니다. 그들은 테이블의 키 필드의 유형과 일치해야합니다. 세 번째 출력 열은 트리의 깊이이며 유형이어야합니다Integer
. abranch_delim
매개 변수가 제공되었고, 다음 출력 열은 분기 디스플레이이며 유형이어야합니다텍스트
. 마지막으로,Orderby_fld
매개 변수가 제공되었고, 마지막 출력 열은 일련 번호이며 유형이어야합니다정수
.
the“Branch”출력 열은 현재 행에 도달하기 위해 촬영 한 키의 경로를 보여줍니다. 키는 지정된에 의해 분리됩니다BRANCE_DELIM
문자열. 분기 디스플레이가 원하지 않으면 두 가지를 모두 생략하십시오BRANCE_DELIM
출력 열 목록의 매개 변수 및 분기 열.
같은 부모의 형제 자매의 주문이 중요하다면Orderby_fld
형제 자매를 주문할 필드를 지정하는 매개 변수. 이 필드는 정렬 가능한 데이터 유형 일 수 있습니다. 출력 열 목록에는 최종 정수 직렬 번호 열이 포함되어야합니다.Orderby_fld
지정되어 있습니다.
테이블 및 필드 이름을 나타내는 매개 변수는 as-as-as-as-asConnectby
내부적으로 생성됩니다. 따라서 이름이 혼합 된 경우 또는 특수 문자를 포함하는 경우 이중 인용문을 포함하십시오. 토토 커뮤니티 이름을 스키마 자격으로 평가해야 할 수도 있습니다.
대형 토토 커뮤니티에서는 부모 키 필드에 색인이 없으면 성능이 저하됩니다.
BRANCE_DELIM
문자열이 키 값에 나타나지 않으면Connectby
무한 반환 오류를 잘못보고 할 수 있습니다. ifBRANCE_DELIM
제공되지 않음, 기본값~
재귀 탐지 목적으로 사용됩니다.
여기 예입니다.
테이블 작성 Connectby_tree (keyid 텍스트, parent_keyid 텍스트, pos int); Connectby_tree 값에 삽입 ( 'Row1', Null, 0); Connectby_tree 값에 삽입 ( 'Row2', 'Row1', 0); Connectby_tree 값에 삽입 ( 'Row3', 'Row1', 0); Connectby_tree 값에 삽입 ( 'Row4', 'Row2', 1); Connectby_tree 값에 삽입 ( 'Row5', 'Row2', 0); Connectby_tree 값에 삽입 ( 'Row6', 'Row4', 0); Connectby_tree 값에 삽입 ( 'Row7', 'Row3', 0); Connectby_tree 값에 삽입 ( 'Row8', 'Row6', 0); Connectby_tree 값에 삽입 ( 'Row9', 'Row5', 0); - Orderby_fld가없는 분기 (결과 순서는 보장되지 않음) 선택 *에서 Connectby ( 'Connectby_tree', 'keyid', 'parent_keyid', 'row2', 0, '~')를 선택하십시오. t (keyid text, parent_keyid 텍스트, 레벨 int, branch 텍스트); keyid | parent_keyid | 레벨 | 나뭇가지 -------+---------------+-------+-------------------- Row2 | | 0 | Row2 Row4 | Row2 | 1 | Row2 ~ Row4 Row6 | Row4 | 2 | Row2 ~ Row4 ~ Row6 Row8 | Row6 | 3 | row2 ~ row4 ~ row6 ~ row8 Row5 | Row2 | 1 | Row2 ~ Row5 Row9 | Row5 | 2 | Row2 ~ row5 ~ row9 (6 줄) - 분기 없음, Orderby_fld없이 (결과 순서는 보장되지 않습니다) 선택 *에서 Connectby ( 'Connectby_tree', 'keyid', 'parent_keyid', 'row2', 0) t (keyid text, parent_keyid 텍스트, 레벨 int); keyid | parent_keyid | 수준 -------+-------------+------- Row2 | | 0 Row4 | Row2 | 1 Row6 | Row4 | 2 Row8 | Row6 | 3 Row5 | Row2 | 1 Row9 | Row5 | 2 (6 줄) - Orderby_fld와 함께 Branch (Row5가 Row4 앞에 오는 것을 주목하십시오) Connectby에서 *를 선택하십시오 ( 'Connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0, '~')) t (keyid text, parent_keyid 텍스트, 레벨 int, 분기 텍스트, pos int); keyid | parent_keyid | 레벨 | 지점 | POS -------+----------------------------------------------------- Row2 | | 0 | Row2 | 1 Row5 | Row2 | 1 | Row2 ~ Row5 | 2 Row9 | Row5 | 2 | Row2 ~ Row5 ~ Row9 | 3 Row4 | Row2 | 1 | Row2 ~ Row4 | 4 Row6 | Row4 | 2 | Row2 ~ Row4 ~ Row6 | 5 Row8 | Row6 | 3 | row2 ~ row4 ~ row6 ~ row8 | 6 (6 줄) - 지점없이, Orderby_fld (Row5가 Row4 전에 오는 것을 주목) 선택 *에서 Connectby ( 'Connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0) t (keyid text, parent_keyid 텍스트, 레벨 int, pos int); keyid | parent_keyid | 레벨 | POS -------+-------------+-------+----- Row2 | | 0 | 1 Row5 | Row2 | 1 | 2 Row9 | Row5 | 2 | 3 Row4 | Row2 | 1 | 4 Row6 | Row4 | 2 | 5 Row8 | Row6 | 3 | 6 (6 줄)
Joe Conway
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면