Vous n'êtes pas identifié(e).
Pages : 1
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
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
Magnifique, c'est exactement ce que je cherchais!
Merci beaucoup!
Hors ligne
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
Pages : 1