>데이터 베이스 >MySQL 튜토리얼 >비활성 시간(분)을 포함하여 매 분마다 PostgreSQL에서 실행 중인 행 수를 생성하는 방법은 무엇입니까?

비활성 시간(분)을 포함하여 매 분마다 PostgreSQL에서 실행 중인 행 수를 생성하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-19 01:02:12907검색

PostgreSQL: 비활성 기간을 포함하여 분 단위로 실행 행 수 생성

이 문서에서는 몇 분 동안 활동이 없더라도 PostgreSQL 테이블에서 분당 실행 중인 행 수를 생성하는 방법을 보여줍니다.

How to Generate a Running Row Count in PostgreSQL for Each Minute, Including Inactive Minutes?

방법 1: 활동적 시간(분)에 대해서만 계산 실행

이 접근 방식은 창 함수를 사용하여 활동이 존재하는 각 분의 실행 횟수를 계산합니다.

<code class="language-sql">SELECT DISTINCT
       date_trunc('minute', "when") AS minute,
       count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_count
FROM   mytable
ORDER  BY 1;</code>

date_trunc('minute', "when") 행을 분 단위로 그룹화합니다. count(*) OVER (ORDER BY date_trunc('minute', "when")) 기능은 분 단위로 정렬된 누계를 제공합니다.

방법 2: 비활성 시간(분) 포함

활동이 없는 분을 포함하려면 generate_series을 사용하여 완전한 분 시퀀스를 생성하고 LEFT JOIN을 사용하여 횟수를 통합합니다.

<code class="language-sql">WITH cte AS (
   SELECT date_trunc('minute', "when") AS minute, COUNT(*) AS minute_ct
   FROM   mytable
   GROUP  BY 1
)
SELECT m.minute, COALESCE(sum(cte.minute_ct) OVER (ORDER BY m.minute), 0) AS running_count
FROM  (
   SELECT generate_series(min(minute), max(minute), interval '1 min') AS minute
   FROM   cte
) m
LEFT   JOIN cte USING (minute)
ORDER  BY 1;</code>

A CTE(cte)는 행을 분 단위로 그룹화하고 개수를 셉니다. generate_series은 전체 시간 범위에 걸쳐 일련의 분을 생성합니다. LEFT JOIN는 이 계열을 cte의 개수와 결합하고 COALESCE는 실행 개수를 0으로 할당하여 활동이 없는 분을 처리합니다. 그런 다음 sum() OVER (ORDER BY m.minute)는 누적 합계를 계산합니다.

위 내용은 비활성 시간(분)을 포함하여 매 분마다 PostgreSQL에서 실행 중인 행 수를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.