Menggunakan GROUP BY PostgreSQL untuk Mengagregatkan Nombor Berturut-turut
PostgreSQL menawarkan ciri berkuasa untuk pengagregatan data. Panduan ini menunjukkan cara mengumpulkan nilai angka berturut-turut menggunakan klausa GROUP BY
, khususnya memfokuskan pada senario yang melibatkan tahun berjujukan.
Contoh Senario: Pengumpulan Tahun mengikut Syarikat dan Profesion
Bayangkan jadual bernama qualification
dengan lajur company
, profession
dan year
. Matlamatnya adalah untuk mengenal pasti gabungan unik profesion syarikat dan mengumpulkan tahun berturut-turut mereka ke dalam tatasusunan.
Penyelesaian Langkah demi Langkah:
<code class="language-sql">SELECT company, profession, year, CASE WHEN ROW_NUMBER() OVER (PARTITION BY company, profession ORDER BY year) = 1 OR year - LAG(year, 1, year) OVER (PARTITION BY company, profession ORDER BY year) > 1 THEN 1 ELSE 0 END AS group_cnt FROM qualification;</code>
Pertanyaan ini menggunakan ROW_NUMBER()
untuk menetapkan kedudukan unik dalam setiap kumpulan profesion syarikat dan LAG()
untuk membandingkan tahun semasa dengan tahun sebelumnya. group_cnt
bendera tahun bukan berturut-turut dengan 1
.
<code class="language-sql">SELECT company, profession, year, SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr FROM ( -- The query from Step 1 goes here ) t1;</code>
Fungsi tetingkap SUM() OVER()
secara kumulatif menjumlahkan nilai group_cnt
, mewujudkan jumlah berjalan yang berfungsi sebagai ID kumpulan (group_nr
).
array_agg()
untuk mengagregat tahun dalam setiap kumpulan:<code class="language-sql">SELECT company, profession, ARRAY_AGG(year) AS years FROM ( -- The query from Step 2 goes here ) t2 GROUP BY company, profession, group_nr ORDER BY company, profession, group_nr;</code>
Pertanyaan ini mengumpulkan hasil dengan company
, profession
dan group_nr
, menggunakan ARRAY_AGG()
untuk menggabungkan tahun ke dalam tatasusunan bagi setiap kumpulan.
Output Jangkaan: Output akhir akan mengumpulkan tahun berturut-turut ke dalam tatasusunan:
<code> company | profession | years ---------+------------+------------------ Google | Programmer | {2000} Google | Sales | {2000,2001,2002} Google | Sales | {2004} Mozilla | Sales | {2002} (4 rows)</code>
Kaedah ini mengendalikan pengelompokan nilai angka berturut-turut dengan cekap, memberikan penyelesaian yang jelas dan padat untuk analisis data dalam PostgreSQL.
Atas ialah kandungan terperinci Bagaimana untuk mengumpulkan Nilai Numerik Berturut-turut dalam PostgreSQL menggunakan GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!