Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong kèo bóng đá euro phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

kèo bóng đá euroF.37. bảng

ThebảngMô -đun bao gồm kèo bóng đá euro chức năng khác nhau mà kèo bóng đá euro bảng trả về (nghĩa là nhiều hàng). kèo bóng đá euro chức năng này hữu ích cả theo đúng nghĩa của chúng và là ví dụ về cách viết kèo bóng đá euro chức năng C trả về nhiều hàng.

F.37.1. kèo bóng đá euro chức năng được cung cấp

Bảng F-30Hiển thị kèo bóng đá euro chức năng được cung cấp bởiBảng điều khiểnMô -đun.

Bảng F-30.bảngChức năng

chức năng return Mô tả
cormal_rand (int numvals, float8 trung bình, float8 stddev) setof float8 Sản xuất một tập hợp kèo bóng đá euro giá trị ngẫu nhiên được phân phối bình thường
crosstab (văn bản SQL) SETOF Record Sản xuất A"Bảng Pivot"chứa tên hàng cộng vớinkèo bóng đá euro giá trị, trong đónđược xác định bởi loại hàng được chỉ định trong truy vấn gọi
crosstabn(văn bản SQL) setof bảng_crosstab_n Sản xuất A"Bảng Pivot"chứa tên hàng cộng vớinkèo bóng đá euro giá trị.crosstab2, crosstab3crosstab4được xác định trước, nhưng bạn có thể tạo thêmcrosstabnkèo bóng đá euro chức năng như được mô tả bên dưới
crosstab (text Source_sql, văn bản category_sql) Setof Record Sản xuất A"Bảng Pivot"Với kèo bóng đá euro cột giá trị được chỉ định bởi truy vấn thứ hai
crosstab (văn bản SQL, int n) SETOF Record

Phiên bản lỗi thời củacrosstab (văn bản). Tham sốnhiện bị bỏ qua, vì số lượng kèo bóng đá euro giá trị luôn được xác định bởi truy vấn gọi

11691_11832 SETOF Record 11891_11951

F.37.1.1.bình thường_rand

12142_12217

bình thường_randSản xuất một tập hợp kèo bóng đá euro giá trị ngẫu nhiên được phân phối bình thường (phân phối Gaussian).

numvalslà số lượng giá trị được trả về từ hàm.trung bìnhlà giá trị trung bình của phân phối giá trị bình thường vàSTDDEVlà độ lệch chuẩn của phân phối giá trị bình thường.

Ví dụ: cuộc gọi này yêu cầu 1000 giá trị với giá trị trung bình là 5 và độ lệch chuẩn là 3:

test =# Chọn * từ bình thường_rand (1000, 5, 3);
     bình thường_rand
--------------------------
     1.56556322244898
     9.10040991424657
     5.36957140345079
   -0.369151492880995
    0.283600703686639
       .
       .
       .
     4.82992125404908
     9.71308014517282
     2.49639286969028
(1000 hàng)

F.37.1.2.crosstab (văn bản)

crosstab (văn bản SQL)
crosstab (văn bản SQL, int n)

ThecrosstabHàm được sử dụng để sản xuất"Pivot"Hiển thị, trong đó dữ liệu được liệt kê trên trang thay vì xuống. Ví dụ: chúng ta có thể có dữ liệu như

ROW1 Val11
Hàng1 Val12
Hàng1 Val13
...
ROW2 Val21
ROW2 Val22
ROW2 Val23
...

mà chúng tôi muốn hiển thị như

ROW1 Val11 Val12 Val13 ...
ROW2 Val21 Val22 Val23 ...
...

ThecrosstabHàm lấy tham số văn bản là truy vấn SQL tạo dữ liệu thô được định dạng theo cách đầu tiên và tạo kèo bóng đá euro một bảng được định dạng theo cách thứ hai.

TheSQLTham số là câu lệnh SQL tạo kèo bóng đá euro bộ dữ liệu nguồn. Câu lệnh này phải trả về mộtROW_NAMEkèo bóng đá euro, mộtthể loạikèo bóng đá euro và mộtgiá trịkèo bóng đá euro.nlà một tham số lỗi thời, bị bỏ qua nếu được cung cấp (trước đây là điều này phải khớp với số lượng cột giá trị đầu kèo bóng đá euro, nhưng bây giờ được xác định bởi truy vấn gọi điện).

Ví dụ: truy vấn được cung cấp có thể tạo kèo bóng đá euro một tập hợp một cái gì đó như:

giá trị mèo ROW_NAME
----------+-------+-------
  Hàng1 CAT1 Val1
  Hàng1 CAT2 Val2
  Hàng1 CAT3 Val3
  Hàng1 cat4 val4
  ROW2 CAT1 Val5
  ROW2 CAT2 Val6
  ROW2 CAT3 Val7
  ROW2 cat4 val8

ThecrosstabHàm được tuyên bố trả vềSETOF Record, Vì vậy, kèo bóng đá euro tên và loại thực tế của kèo bóng đá euro cột đầu ra phải được xác định trongtừmệnh đề của cuộc gọiChọnCâu lệnh, ví dụ:

Chọn * từ crosstab ('...' ') dưới dạng CT (ROW_NAME TEX

15224_15269

<== kèo bóng đá euro giá trị ==
 ROW_NAME CAGETORY_1 CAGETORY_2
----------+------------+------------
  Hàng1 val1 val2
  Row2 Val5 Val6

​​Thetừmệnh đề phải xác định đầu kèo bóng đá euro là mộtROW_NAMEkèo bóng đá euro (cùng loại dữ liệu với kèo bóng đá euro kết quả đầu tiên của truy vấn SQL) theo sau là ngiá trị15719_15906

ThecrosstabHàm tạo kèo bóng đá euro một hàng đầu kèo bóng đá euro cho mỗi nhóm hàng đầu vào liên tiếp có cùngROW_NAMEGiá trị. Nó điền vào đầu kèo bóng đá eurogiá trịkèo bóng đá euro, từ trái sang phải, vớigiá trịkèo bóng đá euro trường từ kèo bóng đá euro hàng này. Nếu có ít hàng hơn trong một nhóm hơn là có đầu ragiá trịkèo bóng đá euro cột, kèo bóng đá euro cột đầu ra bổ sung được lấp đầy bằng null; Nếu có nhiều hàng hơn, kèo bóng đá euro hàng đầu vào bổ sung sẽ bị bỏ qua.

Trong thực tế, truy vấn SQL phải luôn chỉ địnhĐặt hàng bằng 1,2Để đảm bảo rằng kèo bóng đá euro hàng đầu vào được đặt hàng đúng cách, nghĩa là kèo bóng đá euro giá trị có cùngROW_NAMEđược kết hợp với nhau và đặt hàng chính xác trong hàng. Lưu ý rằngcrosstabBản thân nó không chú ý đến cột thứ hai của kết quả truy vấn; Nó chỉ ở đó để được đặt hàng bởi, để kiểm soát thứ tự trong đó kèo bóng đá euro giá trị cột thứ ba xuất hiện trên trang.

Đây là một ví dụ hoàn chỉnh:

17020_18057

Bạn có thể tránh luôn phải viết kèo bóng đá eurotừmệnh đề để xác định kèo bóng đá euro cột đầu ra, bằng cách thiết lập chức năng crosstab tùy chỉnh có loại hàng đầu ra mong muốn có dây vào định nghĩa của nó. Điều này được mô tả trong phần tiếp theo. Một khả năng khác là nhúng yêu cầutừmệnh đề trong định nghĩa xem.

F.37.1.3.crosstabn(văn bản)

crosstabn(văn bản SQL)

Thecrosstabnkèo bóng đá euro chức năng là ví dụ về cách thiết lập trình bao bọc tùy chỉnh cho chungcrosstabHàm, để bạn không cần ghi tên và loại kèo bóng đá euro trong cuộc gọiChọnTruy vấn. TheTableFuncMô -đun bao gồmcrosstab2, crosstab3crosstab419173_19214

Tạo loại TableFunc_Crosstab_n AS (
    Row_name văn bản,
    Category_1 văn bản,
    Category_2 văn bản,
        .
        .
        .
    thể loại_n văn bản
);

Do đó, kèo bóng đá euro chức năng này có thể được sử dụng trực tiếp khi truy vấn đầu vào tạo raROW_NAMEgiá trịkèo bóng đá euro loạiText, và bạn muốn kèo bóng đá euro cột giá trị đầu ra 2, 3 hoặc 4. Theo tất cả kèo bóng đá euro cách khác, họ cư xử chính xác như được mô tả ở trên cho chungcrosstabchức năng.

Ví dụ, ví dụ được đưa kèo bóng đá euro trong phần trước cũng sẽ hoạt động như

Chọn *
Từ crosstab3 (
  'Chọn RowID, Thuộc tính, Giá trị
   từ CT
   trong đó thuộc tính = '' att2 '' hoặc thuộc tính = '' att3 ''
   đặt hàng theo 1,2 ');

kèo bóng đá euro chức năng này được cung cấp chủ yếu cho mục đích minh họa. Bạn có thể tạo kèo bóng đá euro loại và chức năng trả về của riêng bạn dựa trên cơ bảncrosstab ()Hàm. Có hai cách để làm điều đó:

  • Tạo một loại tổng hợp mô tả kèo bóng đá euro cột đầu ra mong muốn, tương tự như kèo bóng đá euro ví dụ trong20381_20419. Sau đó xác định tên chức năng duy nhất chấp nhận mộtTexttham số và trả vềsetof your_type_name, nhưng liên kết với cùng một cơ bảncrosstabc Hàm. Ví dụ: nếu dữ liệu nguồn của bạn tạo tên hàng làTextvà kèo bóng đá euro giá trị làfloat8và bạn muốn 5 kèo bóng đá euro giá trị:

    20855_21218
  • Sử dụngouttham số để xác định loại trả về ngầm. Ví dụ tương tự cũng có thể được thực hiện theo cách này:

    Tạo hoặc thay thế hàm crosstab_float8_5_cols (
        Trong văn bản,
        OUT MY_ROW_NAME TEXT,
        OUT My_c Category_1 Float8,
        OUT My_c Category_2 Float8,
        OUT My_C Category_3 Float8,
        OUT My_c Category_4 float8,
        kèo bóng đá euro my_carget_5 float8)
      Trả về bản ghi Setof
      Như '$ libdir/pablefunc', 'crosstab' ngôn ngữ c ổn định;

F.37.1.4.crosstab (văn bản, văn bản)

21910_21956

Giới hạn chính của dạng tham số đơn củacrosstab22054_22348crosstabXử lý trường hợp này bằng cách cung cấp một danh sách rõ ràng kèo bóng đá euro danh mục tương ứng với kèo bóng đá euro cột đầu ra.

Source_SQLlà một câu lệnh SQL tạo kèo bóng đá euro bộ dữ liệu nguồn. Câu lệnh này phải trả về mộtROW_NAMEkèo bóng đá euro, mộtthể loạikèo bóng đá euro và mộtgiá trịkèo bóng đá euro. Nó cũng có thể có một hoặc nhiều"Extra"kèo bóng đá euro. TheROW_NAMEkèo bóng đá euro phải là đầu tiên. The22933_22943giá trịkèo bóng đá euro cột phải là hai cột cuối cùng, theo thứ tự đó. Bất kỳ cột nào giữaROW_NAMEthể loạiđược coi là"Extra". The"Extra"kèo bóng đá euro cột dự kiến ​​sẽ giống nhau cho tất cả kèo bóng đá euro hàng có cùngROW_NAMEgiá trị.

Ví dụ,Source_SQLCó thể tạo kèo bóng đá euro một bộ một thứ như:

chọn hàng_name, Extra_col, Cat, giá trị từ thứ tự foo bằng 1;

 Row_name Extra_col Cat Value
----------+------------+-----+---------
  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_sqllà một câu lệnh SQL tạo ra tập hợp kèo bóng đá euro danh mục. Câu lệnh này phải trả về chỉ một cột. Nó phải tạo ra ít nhất một hàng, hoặc một lỗi sẽ được tạo ra. Ngoài ra, nó không được tạo ra kèo bóng đá euro giá trị trùng lặp hoặc một lỗi sẽ được tạo ra.category_sqlcó thể là một cái gì đó như:

24254_24350

Thecrosstabhàm được khai báo trả vềSetof Record24466_24545từmệnh đề của cuộc gọiChọnCâu lệnh, ví dụ:

Chọn * từ crosstab ('...', '...')
    Như CT (ROW_NAME TEXT, Text Text, Cat1 Text, Cat2 Text, Cat3 Text, Cat4 Text);

Điều này sẽ tạo kèo bóng đá euro kết quả như:

<== kèo bóng đá euro giá trị ==
Row_Name Extra Cat1 Cat2 Cat3 Cat4
---------+-------+------+------+------+------
  ROW1 Extra1 Val1 Val4
  Row2 Extra2 Val5 Val6 Val7

Thetừmệnh đề phải xác định số lượng cột đầu ra thích hợp của kèo bóng đá euro loại dữ liệu thích hợp. Nếu cónkèo bóng đá euro trongSource_SQLKết quả của truy vấn, đầu tiênn-2 trong số chúng phải khớp với lần đầu tiênn-2 Cột đầu ra. kèo bóng đá euro cột đầu ra còn lại phải có loại cột cuối cùng củaSource_SQLKết quả của Truy vấn và phải có chính xác như nhiều trong số chúng có hàng trongcategory_sqlKết quả của truy vấn.

ThecrosstabHàm tạo kèo bóng đá euro một hàng đầu kèo bóng đá euro cho mỗi nhóm hàng đầu vào liên tiếp có cùngROW_NAMEGiá trị. Đầu kèo bóng đá euroROW_NAMEkèo bóng đá euro, cộng với bất kỳ"Extra"Cột, được sao chép từ hàng đầu tiên của nhóm. Đầu kèo bóng đá eurogiá trịkèo bóng đá euro cột được lấp đầy bằnggiá trịkèo bóng đá euro trường từ kèo bóng đá euro hàng có khớpthể loại26259_26281thể loạikhông phù hợp với bất kỳ đầu kèo bóng đá euro nào củacategory_sqlTruy vấn, nógiá trịbị bỏ qua. kèo bóng đá euro cột đầu ra có danh mục phù hợp không có trong bất kỳ hàng đầu vào nào của nhóm được lấp đầy bằng nulls.

Trong thực tếSource_SQLTruy vấn phải luôn chỉ địnhĐặt hàng bằng 1Để đảm bảo rằng kèo bóng đá euro giá trị có cùngROW_NAMEđược kết hợp với nhau. Tuy nhiên, việc đặt hàng kèo bóng đá euro danh mục trong một nhóm không quan trọng. Ngoài ra, điều cần thiết là phải chắc chắn rằng thứ tự củacategory_sqlĐầu kèo bóng đá euro của truy vấn phù hợp với thứ tự cột đầu kèo bóng đá euro được chỉ định.

Đây là hai ví dụ hoàn chỉnh:

Tạo doanh số bảng (năm int, tháng int, qty int);
chèn vào giá trị bán hàng (2007, 1, 1000);
chèn vào giá trị bán hàng (2007, 2, 1500);
chèn vào giá trị bán hàng (2007, 7, 500);
chèn vào giá trị bán hàng (2007, 11, 1500);
chèn vào giá trị bán hàng (2007, 12, 2000);
chèn vào giá trị bán hàng (2008, 1, 1000);

Chọn * Từ Crosstab (
  'Chọn năm, tháng, QTY từ đơn đặt hàng bán hàng bằng 1',
  'Chọn M từ Generate_Series (1,12) m'
) BẰNG (
  năm int,
  "Jan" int,
  "Feb" int,
  "Mar" int,
  "APR" int,
  "May" int,
  "Jun" int,
  "Jul" int,
  "Aug" int,
  "Sep" int,
  "OCT" int,
  "Nov" int,
  "Dec" int
);
 năm | Jan | Tháng 2 | MAR | APR | Tháng 5 | Jun | Tháng 7 | Tháng 8 | Tháng 9 | Tháng 10 | Tháng 11 | Tháng mười hai
------+------+------+-----+-----+-----+-----+-----+-----+-----+-----+------+------
 2007 | 1000 | 1500 |     |     |     |     | 500 |     |     |     | 1500 | 2000
 2008 | 1000 |      |     |     |     |     |     |     |     |     |      |
(2 hàng)
28027_29285

Bạn có thể tạo kèo bóng đá euro chức năng được xác định trước để tránh phải ghi ra tên và loại cột kết quả trong mỗi truy vấn. Xem kèo bóng đá euro ví dụ trong phần trước. Hàm C bên dưới cho dạng này củacrosstabđược đặt têncrosstab_hash.

29664_29676Connectby

29745_29906

TheConnectbyHàm tạo ra màn hình dữ liệu phân cấp được lưu trữ trong bảng. Bảng phải có một trường chính xác định duy nhất kèo bóng đá euro hàng và trường cha mẹ tham chiếu cha mẹ (nếu có) của mỗi hàng.ConnectbyCó thể hiển thị cây con giảm dần từ bất kỳ hàng nào.

Bảng F-31Giải thích kèo bóng đá euro tham số.

Bảng F-31.Connectbytham số

tham số Mô tả
Relname 30726_30755
keyid_fld Tên của trường chính
Parent_Keyid_FLD Tên của trường cha mẹ
OrderBy_FLD Tên của trường để đặt hàng anh chị em theo (tùy chọn)
start_with Giá trị khóa của hàng để bắt đầu tại
MAX_DEPTH Độ sâu tối đa để hạ xuống hoặc bằng không cho độ sâu không giới hạn
cành_delim Chuỗi để tách kèo bóng đá euro phím với đầu ra nhánh (tùy chọn)

kèo bóng đá euro trường khóa và cha mẹ có thể là bất kỳ loại dữ liệu nào, nhưng chúng phải là cùng một loại. Lưu ý rằngstart_withGiá trị phải được nhập dưới dạng chuỗi văn bản, bất kể loại trường chính.

TheConnectbyHàm được tuyên bố trả lạiSETOF Record, Vì vậy, kèo bóng đá euro tên và loại thực tế của kèo bóng đá euro cột đầu ra phải được xác định trongtừmệnh đề của cuộc gọiChọnCâu lệnh, ví dụ:

32000_32165

Hai cột đầu kèo bóng đá euro đầu tiên được sử dụng cho khóa hàng hiện tại và phím hàng của nó; Họ phải khớp với loại trường chính của bảng. Cột đầu kèo bóng đá euro thứ ba là độ sâu trong cây và phải loạiSố nguyên. Nếu acành_delimTham số đã được đưa kèo bóng đá euro, cột đầu kèo bóng đá euro tiếp theo là hiển thị nhánh và phải thuộc loạiText. Cuối cùng, nếu mộtOrderBy_FLDTham số đã được đưa kèo bóng đá euro, cột đầu kèo bóng đá euro cuối cùng là số sê -ri và phải thuộc loạiSố nguyên.

The"Chi nhánh"Cột đầu ra hiển thị đường dẫn của kèo bóng đá euro phím được thực hiện để đạt được hàng hiện tại. kèo bóng đá euro khóa được phân tách bằng được chỉ địnhcành_delimChuỗi. Nếu không có hiển thị chi nhánh nào, hãy bỏ qua cảcành_delimTham số và cột nhánh trong danh sách cột đầu kèo bóng đá euro.

Nếu thứ tự của anh chị em cùng cha mẹ là quan trọng, bao gồmOrderBy_FLDTham số để chỉ định trường nào để đặt hàng anh chị em. Trường này có thể thuộc bất kỳ loại dữ liệu có thể sắp xếp. Danh sách cột đầu kèo bóng đá euro phải bao gồm cột nối số số tiếp số nguyên cuối cùng, nếu và chỉ khiOrderBy_FLDđược chỉ định.

kèo bóng đá euro tham số đại diện cho tên bảng và trường được sao chép AS-IS vào kèo bóng đá euro truy vấn SQL màConnectbyTạo nội bộ. Do đó, bao gồm kèo bóng đá euro trích dẫn kép nếu kèo bóng đá euro tên là trường hợp hỗn hợp hoặc chứa kèo bóng đá euro ký tự đặc biệt. Bạn cũng có thể cần phải trình độ Schema-đủ điều kiện.

Trong kèo bóng đá euro bảng lớn, hiệu suất sẽ kém trừ khi có chỉ mục trên trường khóa phụ huynh.

Điều quan trọng làcành_delimChuỗi không xuất hiện trong bất kỳ giá trị khóa nào, khácConnectbyCó thể báo cáo không chính xác một lỗi thu được vô hạn. Lưu ý rằng nếucành_delimkhông được cung cấp, giá trị mặc định của~được sử dụng cho mục đích phát hiện đệ quy.

Đây là một ví dụ:

34280_37094

F.37.2. Tác giả

Joe Conway