PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 08/06/2010 09:33:34

shenriod
Membre

Syntaxe de COUNT(expression)

Bonjour,

voici mon souci: je suis en train de créer une vue qui calcule des statistiques (SUM, AVG, STDDEV...) sur les valeurs d'une table aspect, avec 2 niveaux de groupage (GROUP BY champ1, champ2).

Un de mes champs contient des valeurs de type CHARVAR(2) et je souhaiterais, pour chaque catégorie issue de mon GROUP BY, compter le nombre d'occurrences de chaque valeur possible.

En l'occurrence, il s'agit de valeurs d'exposition d'une pente et donc un choix discret de valeurs (N, NE, E, SE, S, SW, W, NW)

Ce que je veux obtenir dans ma vue, c'est un champ nb_north avec le nombre d'enregistrements qui ont la valeur N, un champ nb_northeast avec le nombre d'enregistrements qui ont la valeur NE...

Je pensais utiliser la fonction COUNT(expression), mais je ne sais pas comment rédiger mon expression.

J'ai essayé des choses comme:

COUNT('obs."aspect" WHERE obs."aspect" = N') AS nb_north

COUNT(aspect = 'N') AS nb_north

...

Mais le résultat est toujours plus ou moins équivalent à un COUNT(*)

Une solution serait évidemment de faire un COUNT(*) et d'ajouter ma colonne aspect à la clause GROUP BY, mais mes autres statistiques vons alors se trouver explosées dans trop de sous-catégories et ce n'est pas le niveau de groupage que je souhaite de toute façon...

Si quelqu'un a une idée, c'est très volontiers!

merci d'avance,

Steph

Hors ligne

#2 08/06/2010 09:52:46

Marc Cousin
Membre

Re : Syntaxe de COUNT(expression)

Count (expression) compte le nombre d'enregistrements pour lesquels expression est «NOT NULL»

Par exemple :
marc=# CREATE TABLE test (a int);
CREATE TABLE
marc=# INSERT INTO test values (1),(1),(2);
INSERT 0 3

marc=# SELECT count (case when a=1 then 1 else NULL end), count (case when a=2 then 1 else NULL end) from test;
  count | count
-------+-------
      2 |     1
(1 row)

C'est une des ruses classiques pour faire ce genre de décompte.


Marc.

Hors ligne

#3 08/06/2010 10:21:18

shenriod
Membre

Re : Syntaxe de COUNT(expression)

Magnifique, c'est exactement ce que je cherchais!

Merci beaucoup!

Hors ligne

#4 09/06/2010 12:52:48

meles
Membre

Re : Syntaxe de COUNT(expression)

Bonjour,
  j'arrive un peu après la bataille mais il y aurai eu aussi ceci de possible :

SELECT sum (case when a=1 then 1 else 0 end), sum (case when a=2 then 1 else 0 end) from test;

Je ne sais pas ce qui est le plus rapide !

Cordialement

Hors ligne

Pied de page des forums