Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Kiraan Baris Larian setiap Minit dengan Cekap dalam PostgreSQL?
<code class="language-sql">SELECT COUNT(id) AS count, EXTRACT(hour FROM "when") AS hour, EXTRACT(minute FROM "when") AS minute FROM mytable GROUP BY hour, minute;</code>
Pertanyaan ini mengira baris seminit tetapi tidak memberikan jumlah berjalan.
Kaedah 1: Hanya kembalikan minit dengan rekod aktiviti
<code class="language-sql">SELECT DISTINCT date_trunc('minute', "when") AS minute, count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_ct FROM mytable ORDER BY 1;</code>
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
.
Kaedah 2: Gunakan subquery dengan join
<code class="language-sql">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;</code>
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)
<code class="language-sql">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;</code>
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!