2010-04-11 4 views
6

TableMySQL - deux chefs d'accusation avec différents WHERE dans une requête

field1 field2 
a  1 
b 
c  3 
e  4 
f 

J'ai besoin de compter field1 et not empty field2 avec sur requête:

SELECT COUNT(field1) FROM table 
+ 
SELECT COUNT(field2) FROM table WHERE field2 != '' 

résultat devrait être de 5 et 3 in one query.

Est-ce possible?

+0

Souhaitez-vous que 5 * et * 3, ou tout simplement 8 ? –

+0

field1 = 5 et field2 = 3 – Qiao

Répondre

11

Facile comme bonjour :)

select count(field1), count(field2) 
from my_table 

Résultat:

+--------+--------+ 
| field1 | field2 | 
+--------+--------+ 
| 5  | 3  | 
+--------+--------+ 

Si les valeurs vides dans le field2 colonne sont '' (chaînes vides) au lieu de NULL réelle, vous pouvez essayer ceci:

select count(field1), sum(case when field2 != '' then 1 else 0 end) 
from my_table; 
+1

Cela va retourner 5 et 5; 'count()' compte toute valeur qui n'est pas NULL, y compris les chaînes vides –

+1

@Michael Mrozek, oui j'ai remarqué qu'il utilisait '! = ''' dans sa question et mis à jour mon post en conséquence. –

0

de combiner les résultats des requêtes avec des formats de colonnes identiques, utilisez UNION entre les

SELECT w FROM x 
UNION 
SELECT y FROM z 
7
SELECT 
    (SELECT COUNT(field1) FROM table) AS count1, 
    (SELECT COUNT(field2) FROM table WHERE field2 != '') AS count2 
+0

Ceci est mon préféré pour la simplicité et la semi-intuitivité. –

4

Encore une autre façon:

SELECT COUNT(field1), COUNT(IF(field2='', NULL, field2)) 
    FROM ... 
Questions connexes