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
Libérer: 2025-01-19 00:57:10
original
364 Les gens l'ont consulté

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 :

SELECT
  COUNT(id) AS count,
  EXTRACT(hour FROM "when") AS hour,
  EXTRACT(minute FROM "when") AS minute
FROM
  mytable
GROUP BY
  hour,
  minute;
Copier après la connexion

2. Nombre cumulé de lignes par minute

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

SELECT DISTINCT
  date_trunc('minute', "when") AS minute,
  COUNT(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_count
FROM
  mytable
ORDER BY
  minute;
Copier après la connexion

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 :

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;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal