Maison >base de données >tutoriel mysql >Comment calculer un nombre de lignes en cours par minute dans PostgreSQL ?

Comment calculer un nombre de lignes en cours par minute dans PostgreSQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-19 00:57:10333parcourir

How to Calculate a Running Row Count by Minute in PostgreSQL?

PostgreSQL : nombre de lignes de résultats de requête par minute

Cet article décrit comment utiliser les fonctions de fenêtre dans PostgreSQL pour calculer le nombre de lignes en cours d'exécution de résultats de requête par minutes.

1. Nombre de lignes par minute

La requête suivante renvoie le nombre de lignes par minute :

<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>

2. Nombre cumulé de lignes par minute

Pour calculer le nombre cumulé de lignes par minute, vous pouvez utiliser la requête suivante :

<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
  minute;</code>

Instructions :

  • date_trunc('minute', "when") Tronquez la colonne d'horodatage "quand" à la minute la plus proche.
  • COUNT(*) OVER (ORDER BY date_trunc('minute', "when")) Compte le nombre de lignes exécutées par minute. La clause ORDER BY spécifie l'ordre des lignes agrégées.
  • DISTINCT est utilisé pour garantir que seules les minutes uniques sont renvoyées. En effet, la fonction d'agrégation COUNT renverra plusieurs lignes pour la même minute.

3. Y compris les minutes sans activité

Si vous souhaitez inclure les minutes sans activité dans les résultats, vous pouvez utiliser la requête suivante :

<code class="language-sql">SELECT
  m.minute,
  COALESCE(SUM(c.minute_count) OVER (ORDER BY m.minute), 0) AS running_count
FROM
  (
    SELECT
      generate_series(MIN(minute), MAX(minute), INTERVAL '1 minute') AS minute
    FROM
      (
        SELECT
          date_trunc('minute', "when") AS minute,
          COUNT(*) AS minute_count
        FROM
          mytable
        GROUP BY
          minute
      ) AS sub
  ) AS m
LEFT JOIN
  (
    SELECT
      date_trunc('minute', "when") AS minute,
      COUNT(*) AS minute_count
    FROM
      mytable
    GROUP BY
      minute
  ) AS c
ON
  m.minute = c.minute
ORDER BY
  m.minute;</code>

Instructions :

  • Cette requête utilise LEFT JOIN pour inclure les minutes sans activité.
  • generate_series() La fonction génère une plage de minutes entre les minutes minimales et maximales du tableau.
  • La fonction
  • COALESCE() garantit que les minutes sans activité ont un décompte de 0.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn