Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mencipta Jadual Pangsi Dinamik dengan Cekap dalam PostgreSQL Menggunakan `crosstab()`?

Bagaimanakah Saya Boleh Mencipta Jadual Pangsi Dinamik dengan Cekap dalam PostgreSQL Menggunakan `crosstab()`?

Linda Hamilton
Lepaskan: 2025-01-20 22:51:09
asal
823 orang telah melayarinya

How Can I Efficiently Create Dynamic Pivot Tables in PostgreSQL Using `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:

CREATE EXTENSION tablefunc;
Salin selepas log masuk

Penyelesaian Tab Silang Asas:

Penyelesaian

Mudah crosstab untuk senario ini:

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);
Salin selepas log masuk

Lajur kategori sintetik:

Jika anda tidak mempunyai lajur kategori sebenar, anda boleh menggunakan fungsi tetingkap untuk mencipta lajur kategori sintetik:

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);
Salin selepas log masuk

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:

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);
Salin selepas log masuk

modul tablefunc:

Modul

tablefunc menyediakan pendekatan yang dipermudahkan:

SELECT * FROM crosstab1('SELECT row_name, attrib, val::text FROM tbl ORDER BY 1,2');
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan