Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengira Kiraan Baris Larian setiap Minit dengan Cekap dalam PostgreSQL?

Bagaimana untuk Mengira Kiraan Baris Larian setiap Minit dengan Cekap dalam PostgreSQL?

Patricia Arquette
Lepaskan: 2025-01-19 00:46:10
asal
776 orang telah melayarinya

How to Efficiently Calculate Running Row Counts per Minute in PostgreSQL?

Kaedah pengiraan yang cekap bagi kiraan baris seminit dalam PostgreSQL

Dapatkan kiraan baris

SELECT COUNT(id) AS count,
       EXTRACT(hour FROM "when") AS hour,
       EXTRACT(minute FROM "when") AS minute
FROM mytable
GROUP BY hour, minute;
Salin selepas log masuk

Pertanyaan ini mengira baris seminit tetapi tidak memberikan jumlah berjalan.

Dapatkan kiraan larian

Kaedah 1: Hanya kembalikan minit dengan rekod aktiviti

SELECT DISTINCT
       date_trunc('minute', "when") AS minute,
       count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_ct
FROM   mytable
ORDER  BY 1;
Salin selepas log masuk

Pertanyaan ini menggunakan fungsi date_trunc() untuk mengembalikan kiraan baris bagi setiap minit aktif. Ia mengira jumlah bilangan larian menggunakan fungsi tetingkap dengan klausa ORDER BY.

Mengandungi minit tanpa aktiviti

Kaedah 2: Gunakan subquery dengan join

SELECT minute, sum(minute_ct) OVER (ORDER BY minute) AS running_ct
FROM  (
   SELECT date_trunc('minute', "when") AS minute,
          count(*) AS minute_ct
   FROM   tbl
   GROUP  BY 1
   ) sub
ORDER  BY 1;
Salin selepas log masuk

Kaedah ini mengagregatkan kiraan baris seminit dalam subkueri. Pertanyaan utama kemudian bergabung dengannya untuk mengumpul kiraan dan memasukkan minit tanpa aktiviti.

Kaedah 3: Gunakan CTE (paling cepat)

WITH cte AS (
   SELECT date_trunc('minute', "when") AS minute, count(*) AS minute_ct
   FROM   tbl
   GROUP  BY 1
   ) 
SELECT m.minute,
       COALESCE(sum(cte.minute_ct) OVER (ORDER BY m.minute), 0) AS running_ct
FROM  (
   SELECT generate_series(min(minute), max(minute), interval '1 min')
   FROM   cte
   ) m(minute)
LEFT   JOIN cte USING (minute)
ORDER  BY 1;
Salin selepas log masuk

Kaedah ini menggabungkan CTE, subquery dan left join. Ini adalah pendekatan yang cekap untuk set data besar dengan indeks "bila".

Atas ialah kandungan terperinci Bagaimana untuk Mengira Kiraan Baris Larian setiap Minit dengan Cekap dalam PostgreSQL?. 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