Kumpulkan tahun berturut-turut dalam PostgreSQL 9.0
Artikel ini meneroka cara mengumpulkan tahun berturut-turut dalam PostgreSQL 9.0 sambil mendapatkan maklumat syarikat dan pekerjaan yang unik.
Kami akan menggunakan pendekatan pelbagai langkah untuk mencapai matlamat ini. Mula-mula, kami mengenal pasti tahun bukan berturut-turut menggunakan subkueri yang memberikan nilai "group_cnt" berdasarkan sama ada tahun itu adalah yang pertama dalam jujukan atau sama ada perbezaan antara tahun semasa dan tahun sebelumnya adalah lebih besar daripada 1.
Seterusnya, kami mentakrifkan ID kumpulan dengan menjumlahkan nilai group_cnt untuk tahun yang disusun untuk setiap syarikat dan pekerjaan. Ini mewujudkan kumpulan berturut-turut untuk tahun tidak berturut-turut.
Akhir sekali, kami memanfaatkan satu lagi jadual terbitan kepada agregat tahun berdasarkan ID kumpulan. Hasilnya ialah pelbagai tahun untuk setiap syarikat dan pekerjaan yang unik, dengan tahun berturut-turut dikumpulkan bersama.
Contoh pertanyaan:
<code class="language-sql">SELECT company, profession, array_agg(year) AS years FROM ( SELECT company, profession, year, SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr FROM ( 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 ) t1 ) t2 GROUP BY company, profession, group_nr ORDER BY company, profession, group_nr;</code>
Output:
<code> company | profession | years ---------+------------+------------------ Google | Programmer | {2000} Google | Sales | {2000,2001,2002} Google | Sales | {2004} Mozilla | Sales | {2002} (4 rows)</code>
Atas ialah kandungan terperinci Bagaimana untuk Menghimpunkan Tahun Berturut-turut untuk Syarikat dan Profesion Unik dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!