Rumah > pangkalan data > tutorial mysql > Bagaimana untuk mengumpulkan Nilai Numerik Berturut-turut dalam PostgreSQL menggunakan GROUP BY?

Bagaimana untuk mengumpulkan Nilai Numerik Berturut-turut dalam PostgreSQL menggunakan GROUP BY?

Patricia Arquette
Lepaskan: 2025-01-09 13:21:42
asal
108 orang telah melayarinya

How to Group Consecutive Numeric Values in PostgreSQL using GROUP BY?

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:

  1. Mengenal pasti Tahun Bukan Berturut-turut: Langkah pertama melibatkan penentuan di mana jujukan tahun berturut-turut pecah. Ini dilakukan menggunakan fungsi tetingkap:
<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>
Salin selepas log masuk

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.

  1. Menetapkan ID Kumpulan: Seterusnya, kami menetapkan ID kumpulan unik untuk setiap urutan tahun berturut-turut:
<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>
Salin selepas log masuk

Fungsi tetingkap SUM() OVER() secara kumulatif menjumlahkan nilai group_cnt, mewujudkan jumlah berjalan yang berfungsi sebagai ID kumpulan (group_nr).

  1. Pengagregatan Akhir: Akhir sekali, kami menggunakan 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>
Salin selepas log masuk

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan