Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menghimpunkan Tahun Berturut-turut untuk Syarikat dan Profesion Unik dalam PostgreSQL?

Bagaimana untuk Menghimpunkan Tahun Berturut-turut untuk Syarikat dan Profesion Unik dalam PostgreSQL?

DDD
Lepaskan: 2025-01-09 13:36:41
asal
991 orang telah melayarinya

How to Group Consecutive Years for Unique Companies and Professions in PostgreSQL?

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>
Salin selepas log masuk

Output:

<code> company | profession |      years
---------+------------+------------------
 Google  | Programmer | {2000}
 Google  | Sales      | {2000,2001,2002}
 Google  | Sales      | {2004}
 Mozilla | Sales      | {2002}
(4 rows)</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan