Maison > base de données > tutoriel mysql > Comment compter de manière optimale les occurrences dans les données groupées à l'aide de PostgreSQL ?

Comment compter de manière optimale les occurrences dans les données groupées à l'aide de PostgreSQL ?

Mary-Kate Olsen
Libérer: 2025-01-24 06:14:16
original
574 Les gens l'ont consulté

How to Optimally Count Occurrences in Grouped Data Using PostgreSQL?

Comptez efficacement le nombre d'occurrences dans les données groupées PostgreSQL

PostgreSQL fournit diverses méthodes pour compter les occurrences de données dans des tables groupées. Par exemple, vous pouvez utiliser l'instruction CASE WHEN pour compter des valeurs spécifiques :

<code class="language-sql">SELECT
    sum(CASE WHEN question1 = 0 THEN 1 ELSE 0 END) AS ZERO,
    sum(CASE WHEN question1 = 1 THEN 1 ELSE 0 END) AS ONE,
    sum(CASE WHEN question1 = 2 THEN 1 ELSE 0 END) AS TWO,
    category
FROM reviews
    GROUP BY category</code>
Copier après la connexion

Cependant, lorsque le nombre de valeurs possibles augmente, l'utilisation de l'instruction CASE WHEN devient de plus en plus lourde. Dans PostgreSQL 9.4 et versions ultérieures, l'option globale FILTER fournit une solution plus propre et potentiellement plus rapide :

<code class="language-sql">SELECT category
     , count(*) FILTER (WHERE question1 = 0) AS zero
     , count(*) FILTER (WHERE question1 = 1) AS one
     , count(*) FILTER (WHERE question1 = 2) AS two
FROM   reviews
GROUP  BY 1;</code>
Copier après la connexion

Par souci de concision, une syntaxe simplifiée peut être utilisée :

<code class="language-sql">SELECT category
     , count(question1 = 0 OR NULL) AS zero
     , count(question1 = 1 OR NULL) AS one
     , count(question1 = 2 OR NULL) AS two
FROM   reviews
GROUP  BY 1;</code>
Copier après la connexion

Pour les grandes listes d'options, la fonction crosstab() propose une alternative plus performante :

<code class="language-sql">SELECT * FROM crosstab(
     'SELECT category, question1, count(*) AS ct
      FROM   reviews
      GROUP  BY 1, 2
      ORDER  BY 1, 2'
   , 'VALUES (0), (1), (2)'
   ) AS ct (category text, zero int, one int, two int);</code>
Copier après la connexion

En résumé, PostgreSQL fournit plusieurs méthodes pour le comptage SQL conditionnel. L'option FILTER offre une solution concise et efficace, tandis que la fonction crosstab() offre les meilleures performances pour gérer un grand nombre d'options.

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!

source:php.cn
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