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
247 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:
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;
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:
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;
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:
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;
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!

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