PostgreSQL 9.0 dan yang lebih baru boleh mengagregatkan nilai angka berturut-turut dalam medan tertentu menggunakan klausa GROUP BY
. Pertanyaan berikut menunjukkan cara untuk mencapai ini dalam jadual yang mengandungi medan syarikat, pekerjaan dan tahun:
Langkah 1: Kenal pasti nilai tidak berterusan
<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 memberikan kiraan kumpulan (group_cnt) kepada setiap baris berdasarkan sama ada tahun berturut-turut. Baris dengan group_cnt 1 menunjukkan permulaan kumpulan baharu.
Langkah 2: Tentukan ID kumpulan
<code class="language-sql">-- 步骤二:定义分组 ID SELECT company, profession, year, SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr FROM qualification WHERE group_cnt = 1;</code>
Pertanyaan ini memberikan nombor kumpulan (kumpulan_nr) kepada setiap kumpulan. Setiap tahun berturut-turut tergolong dalam kumpulan yang sama.
Langkah 3: Agregat tahun berturut-turut
<code class="language-sql">-- 步骤三:聚合连续年份 SELECT company, profession, ARRAY_AGG(year) AS years FROM qualification WHERE group_cnt <> 0 GROUP BY company, profession, group_nr ORDER BY company, profession, group_nr;</code>
Pertanyaan akhir ini mengagregatkan tahun berturut-turut ke dalam tatasusunan dan menapis keluar baris bukan berturut-turut. Keputusan dikumpulkan mengikut syarikat dan pekerjaan.
Dengan mengikuti tiga langkah di atas, anda boleh mengagregatkan nilai berterusan dalam PostgreSQL dengan berkesan. Ambil perhatian bahawa jadual qualification
hendaklah digantikan dengan nama jadual sebenar anda.
Atas ialah kandungan terperinci Bagaimana untuk Menghimpun dan Mengagregatkan Nilai Angka Berturut-turut dalam PostgreSQL Menggunakan GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!