Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Pivot Jadual PostgreSQL untuk Menunjukkan Harga Purata mengikut Bilik Tidur dan Kejiranan?

Bagaimana untuk Pivot Jadual PostgreSQL untuk Menunjukkan Harga Purata mengikut Bilik Tidur dan Kejiranan?

Barbara Streisand
Barbara Streisandasal
2025-01-13 08:26:42862semak imbas

How to Pivot a PostgreSQL Table to Show Average Price by Bedrooms and Neighborhoods?

Membuat jadual pangsi dalam PostgreSQL

PostgreSQL menggunakan fungsi crosstab() untuk mencipta jadual pangsi. Fungsi ini menerima dua input: pertanyaan dan senarai nama lajur. Pertanyaan harus menghasilkan set hasil dengan dua lajur: satu untuk pengepala baris dan satu untuk nilai data. Senarai nama lajur harus sepadan dengan lajur dalam set hasil yang harus dipangsi.

Soalan:

Pertimbangkan jadual berikut bernama listings:

id neighborhood bedrooms price
1 downtown 0 189000
2 downtown 3 450000
3 riverview 1 300000
4 riverview 0 250000
5 downtown 1 325000
6 riverview 2 350000

Bagaimana untuk membuat pertanyaan jadual pangsi, dengan bilangan bilik tidur sebagai lajur dan kejiranan sebagai baris, menunjukkan purata harga setiap bilik tidur?

Output yang diperlukan hendaklah diformatkan seperti berikut:

neighborhood 0 1 2 3
downtown 189000 325000 - 450000
riverview 250000 300000 350000 -

Penyelesaian:

Untuk membuat jadual pangsi, ikut langkah berikut:

  1. Kira purata: Gunakan fungsi agregat avg() untuk mengira harga purata bagi setiap gabungan kejiranan dan bilangan bilik tidur.

    <code class="language-sql"> SELECT
       neighborhood,
       bedrooms,
       avg(price)
     FROM
       listings
     GROUP BY
       1, 2
     ORDER BY
       1, 2;</code>
  2. Sediakan hasil kepada tab silang(): Sediakan hasil pertanyaan sebelumnya kepada fungsi crosstab(). Gunakan $$...$$ untuk menentukan tatasusunan nilai untuk nama lajur. Anda boleh menukar purata kepada integer untuk mendapatkan hasil bulat.

    <code class="language-sql"> SELECT
       *
     FROM
       crosstab(
         'SELECT
           neighborhood,
           bedrooms,
           avg(price)::int
         FROM
           listings
         GROUP BY
           1, 2
         ORDER BY
           1, 2;',
         $$SELECT unnest('{0,1,2,3}'::int[])$$
       ) AS ct (
         "neighborhood" text,
         "0" int,
         "1" int,
         "2" int,
         "3" int
       );</code>

Pertanyaan ini menjana jadual pangsi yang diperlukan dengan memutar pada harga purata bilik tidur yang berbeza dalam setiap kejiranan.

Respons yang disemak ini mengekalkan imej asal dan menyusun semula teks untuk mencapai makna yang sama sambil mengelakkan penyalinan kata kerja dan elemen struktur diubah, tetapi maklumat teras kekal utuh.

Atas ialah kandungan terperinci Bagaimana untuk Pivot Jadual PostgreSQL untuk Menunjukkan Harga Purata mengikut Bilik Tidur dan Kejiranan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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