2009-01-06 5 views

Répondre

4

Que diriez-vous

select sum(if(status=0,1,0)) as zeros, 
     sum(if(status>0,1,0)) as greater 
from tbl; 

ne seront pas nécessairement mieux, mais il est un idiome utile d'avoir dans votre arsenal mental!

+0

C'était exactement ce Je cherchais. Merci Au revoir à des sous-sélections moche ... – Kim

+0

Les sous-sélections laides peuvent être moche mais les fonctions par rangée ne se mettent pas bien à l'échelle. Votre solution originale est presque certainement meilleure du point de vue de la performance. – paxdiablo

+0

Cela n'a pas d'importance car je supprime fréquemment les lignes qui ne sont plus valides, donc la table est toujours petite. – Kim

0

Cela vous donne une autre sortie, mais fonctionne sorta:

SELECT `status` > 0 AS 'stat', COUNT(*) 
FROM `tbl` 
GROUP BY stat 

Sortie:

stat | COUNT(*) 
------------------------------- 
0 | (count where status = 0) 
1 | (count where status > 0) 
1

Je vote pour l'utilisation de deux requêtes différentes pour des raisons de simplicité et de lisibilité du code améliorée. Il n'y a pas beaucoup d'avantages à l'aide d'un bidouille pour combiner les requêtes, quand vous pouvez obtenir le même résultat et le code plus lisible en ayant deux requêtes,

1

Voici une autre façon:

SELECT 
    COUNT(NULLIF(`status` = 0, 0)), 
    COUNT(NULLIF(`status` > 0, 0)) 
FROM `tbl` 
Questions connexes