2009-08-21 6 views
11

Très bien, ce que j'essaie de faire est d'effectuer différents COUNT() sur la même table en fonction de différents critères sans requêtes imbriquées (efficacité) ou sous-requêtes (donc peut être transformé en vue). Est-ce possible? Exemple: une table a une colonne de date - la requête doit être capable de produire un compte du nombre de lignes avant & après une date constante.mySQL: plusieurs COUNT() basés sur des critères différents

Répondre

28

Vous utilisez MySQL, vous pouvez donc profiter de sa fonctionnalité qu'une expression booléenne évalue à 0 pour false et 1 pour vrai. Le SUM() de 1 est égal à COUNT() où l'expression est vraie.

SELECT SUM(date_column < '2009-08-21') AS prior_to_date, 
     SUM(date_column > '2009-08-21') AS after_date 
FROM MyTable; 

PS: Ne pas essayer ceci sur d'autres marques de base de données qui confirment le comportement standard SQL, à savoir une expression booléenne donne un booléen, pas 0 ou 1 entier.

+0

Nice - ça marche très bien. Dans d'autres bases de données qui utilisent la syntaxe SQL, je suppose que le fait d'avoir une IF dans la SUM retournant 1 ou 0 étant donné que la condition devrait fonctionner aussi bien. – dborba

+1

Oui. Mais utilisez des expressions 'CASE' si vous voulez être le plus portable. Il n'y a pas de 'IF()' en SQL standard. –

+0

J'ai essayé avec plusieurs et séparés. Le problème que j'ai trouvé si je mets une instruction select séparée avec la clause where nécessaire, alors mysql utilise l'index, mais lorsqu'il est combiné, il n'utilise pas l'index. Vérifié en utilisant expliquer. –

Questions connexes