Hello !
Voici mon problème du jour. Je voudrais, en une seule instruction select, obtenir plusieurs comptes. L'idée générale, serait d'obtenir des parties du tout.
Quelque chose qui ressemblerait à ça :
select
count(champ = valeur1),
count(champ = valeur2),
count(*)
from
table
where
filtre in (valeurA, valeurB);
Evidement, ce que je poste ci-dessus ne fonctionne pas. Ou plutôt, si, ça fonctionne, car c'est syntaxiquement correct, mais les 3 valeurs retournées sont les mêmes : c'est celle du count(*).
Savez-vous comment je peux procéder ?
Je suis sous postgreSQL, et la table compte 55 000 enregistrements. Alors les alias, si je pouvais m'en passer.... Je ne vous fait pas de dessin. D'autant plus que là, ce n'est qu'une ébauche, mais il me faudra d'autres informations qui seront utilisées dans le group by final.
Par avance merci pour vos suggestions.
# coin coin
Posté par Dabowl_94 . Évalué à -9.
dabowl_75
# sum
Posté par Hardy Damien . Évalué à 7.
sum(decode(champ, valeur1, 1, 0)),
sum(decode(champ, valeur2, 1, 0)),
count(0)
from
table
where
filtre in (valeurA, valeurB);
c'est du code oracle mais je pense qu' la fonction decode existe ou a un equivalent sur postgreSQL
Dam
[^] # Re: sum
Posté par Hardy Damien . Évalué à 8.
http://www.postgresql.org/docs/7.4/static/functions-conditional.htm(...)
select
sum(case when champ=valeur1 then 1
else 0),
sum(case when champ=valeur2 then 1
else 0),
count(0)
from
table
where
filtre in (valeurA, valeurB);
est l'equivalent pour postgreSQL.
Dam
[^] # Re: sum
Posté par Gyro Gearllose . Évalué à 3.
# Hum ...
Posté par platinum . Évalué à 6.
Peut-être utiliser les procédures stockées pour mémoriser des valeurs ?
Des fois, c'est tout aussi simple.
[^] # Re: Hum ...
Posté par Gyro Gearllose . Évalué à 2.
Prend ce post pour un doublepertinentage pour rattraper mon erreur !
[^] # Re: Hum ...
Posté par RuleZ . Évalué à 1.
Dailleurs, J'me demande même si sans index sur "champ", une décomposition n'en serait quand même que plus rapide qu'avec les "case" (je ne connais pas suffisement postgreSQL pour l'affirmé) (un filtre est toujours plus rapide qu'une évaluation (surtout imbriqué dans un agrégat), mais le nombre de balayage de la table passe du simple au triple, benchmark interressant à faire)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.