Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Pivot Jadual PostgreSQL untuk Menunjukkan Harga Purata mengikut Bilik Tidur dan Kejiranan?
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:
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>
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!