Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencipta Jadual Pangsi Dinamik dengan Cekap dalam PostgreSQL Menggunakan `crosstab()`?
Cara yang lebih cekap untuk melaksanakan jadual pangsi dinamik menggunakan pernyataan CASE dan GROUP BY
Berbanding dengan pertanyaan yang disediakan dalam artikel, menggunakan fungsi tablefunc
dalam sambungan crosstab()
ialah alternatif yang lebih cekap.
Pemasangan:
Mula-mula, pasang sambungan tablefunc
jika anda belum melakukannya:
<code class="language-sql">CREATE EXTENSION tablefunc;</code>
Penyelesaian Tab Silang Asas:
PenyelesaianMudah crosstab
untuk senario ini:
<code class="language-sql">SELECT * FROM crosstab( 'SELECT bar, 1 AS cat, feh FROM tbl_org ORDER BY bar, feh') AS ct (bar text, val1 int, val2 int, val3 int);</code>
Lajur kategori sintetik:
Jika anda tidak mempunyai lajur kategori sebenar, anda boleh menggunakan fungsi tetingkap untuk mencipta lajur kategori sintetik:
<code class="language-sql">SELECT * FROM crosstab( $$ SELECT bar, val, feh FROM ( SELECT *, 'val' || row_number() OVER (PARTITION BY bar ORDER BY feh) AS val FROM tbl_org ) x ORDER BY 1, 2 $$ , $$VALUES ('val1'), ('val2'), ('val3')$$ ) AS ct (bar text, val1 int, val2 int, val3 int);</code>
Tab Silang Dinamik?
Semasa mencipta crosstab
dinamik sepenuhnya menggunakan plpgsql adalah mencabar kerana pengehadan jenis pulangan dinamik. Berikut ialah contoh kes ujian yang lebih mudah:
<code class="language-sql">SELECT * FROM crosstab('SELECT row_name, attrib, val FROM tbl ORDER BY 1,2') AS ct (row_name text, val1 int, val2 int, val3 int);</code>
modul tablefunc:
Modultablefunc
menyediakan pendekatan yang dipermudahkan:
<code class="language-sql">SELECT * FROM crosstab1('SELECT row_name, attrib, val::text FROM tbl ORDER BY 1,2');</code>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Jadual Pangsi Dinamik dengan Cekap dalam PostgreSQL Menggunakan `crosstab()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!